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

Python使用__getattr__实现包装类传递self.label的方案咨询

解决方案

错误原因

你原有写法中a.self.label的逻辑完全错误:访问a.self时会触发Alpha类的__getattr__方法,将Alpha实例的label设为字符串'self',根本无法获取到Beta实例存储的label值。

实现方式

当执行b.bar.b_function()时,Beta实例已经通过自身的__getattr__方法将bar存储到了实例的self.label属性中,你只需要把这个值传递给Alpha实例即可,以下是两种可行实现:

方案1:直接赋值(最简单高效)

class Beta:
    def __getattr__(self, label):
        self.label = label
        return self

    def b_function(self):
        a = Alpha()
        # 直接把Beta实例存储的label赋值给Alpha实例
        a.label = self.label
        a.a_function()

方案2:沿用Alpha原生调用逻辑

如果你希望严格遵循Alpha类原本通过属性访问设置label的设计风格,可以用getattr实现:

class Beta:
    def __getattr__(self, label):
        self.label = label
        return self

    def b_function(self):
        a = Alpha()
        # 等效于执行 a.bar.a_function(),和Alpha的原生调用逻辑完全一致
        getattr(a, self.label).a_function()

两种方案执行测试代码b = Beta(); b.bar.b_function()都可以正常输出Label: bar。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:06