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

如何实现支持链式属性赋值与访问的Python Foo类?

可以实现

先看具体的实现代码:

class Foo:
    def __getattr__(self, name):
        # 给当前实例动态添加指定名称的属性,值为Foo的新实例
        setattr(self, name, Foo())
        # 返回刚创建的属性值
        return getattr(self, name)

# 测试代码
a = Foo()
a.user.details.money.pay = 130000
print(a.user.details.money.pay)  # 输出 130000

实现原理说明

核心是利用Python的__getattr__特殊方法:

  • 当访问对象不存在的属性时,Python会自动调用该对象的__getattr__方法,传入要访问的属性名作为参数。
  • 在Foo类的__getattr__中,先通过setattr给当前实例动态添加与访问名同名的属性,属性值为Foo的新实例;再返回这个刚创建的实例。
  • 链式访问a.user.details.money时,每一步访问不存在的属性都会触发__getattr__,动态创建对应的子属性并返回新的Foo实例,直到最后给pay赋值——此时money已是Foo实例,直接给它添加pay属性并设置值即可。
  • 最后打印时,pay属性已存在,直接返回设置的130000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:31:02