You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何实现带访问限制的方法与类链式调用

Python 链式条件调用实现方案

核心实现逻辑非常简单:链式调用的本质是每个方法执行完成后,返回对应类的实例对象。要实现「特定方法只能在某些步骤后调用」的限制,只需要把不同阶段可用的方法拆分到不同的类中,对应步骤执行完成后返回对应类的实例即可,没有到对应步骤时,实例根本不会暴露后续方法,自然无法调用。


具体实现代码

先实现你要求的3种场景

# F_A1调用后返回的中间类,仅存放F_A1执行后才能调用的方法
class ClassAIntermediate:
    def __init__(self, a1_result):
        # 存储F_A1的执行结果,供后续方法使用
        self.a1_result = a1_result

    def F_A2(self):
        # 这里直接使用F_A1的结果处理逻辑
        print(f"执行F_A2,依赖的F_A1结果为:{self.a1_result}")
        # 需要继续链式就返回对应实例,这里返回self支持后续同阶段方法调用
        return self

    def B(self):
        # 满足场景2:F_A1执行后才能调用ClassB相关方法
        return ClassB()

# 基础ClassA类
class ClassA:
    def F_A1(self):
        print("执行F_A1")
        a1_result = "F_A1的运行结果"
        # 返回中间类实例,将F_A1结果传递过去
        return ClassAIntermediate(a1_result)

    def B(self):
        # 满足场景3:ClassA实例可直接调用ClassB相关方法
        return ClassB()

# ClassB类,存放ClassB专属方法
class ClassB:
    def F_B1(self):
        print("执行ClassB的F_B1方法")
        return self

场景测试

# 场景1:F_A2仅在F_A1之后可用
ClassA().F_A1().F_A2()
# 直接执行ClassA().F_A2()会直接报错,符合限制要求

# 场景2:F_A1后调用ClassB的方法
ClassA().F_A1().B().F_B1()

# 场景3:ClassA直接调用ClassB
ClassA().B().F_B1()

你给出的cars示例实现

如果没有严格的调用顺序限制,只是常规的属性设置链式调用,所有方法返回self即可:

class CarsQuery:
    def __init__(self):
        self.__brand = None
        self.__color = None

    def brand(self, brand_name: str):
        self.__brand = brand_name
        return self

    def color(self, color_name: str):
        self.__color = color_name
        return self

    def __repr__(self):
        return f"返回{self.__color} {self.__brand}的车辆列表"

def cars():
    return CarsQuery()

测试效果

print(cars().brand('Audi').color('red'))
# 输出:返回red Audi的车辆列表

小提示:给方法加上返回值类型注解后,IDE会自动提示对应阶段可用的方法,使用体验更好。

内容的提问来源于stack exchange,提问作者Cas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:36:07