gpt4 book ai didi

python - 通过 __setattr__ 动态地将类实例添加到 Python 实例中

转载 作者:行者123 更新时间:2023-12-01 05:53:11 28 4
gpt4 key购买 nike

假设我有两个 Python 类,A 和 B。我希望能够执行以下操作:

>>> b = B()
>>> b.a.attr1 = 'foo'
>>> b.a.attr2 = 'bar'

其中“a”是 A 的实例。我无法使用 __setattr__就像我会的,如果“a”是某个“原始”类型。除了

之外,还有什么优雅的方法可以实现这一点吗?
>>> b = B()
>>> b.a = A()
>>> b.a.attr1 = 'foo'
>>> b.a.attr2 = 'bar'

最佳答案

您必须在 B__init__ 中创建 a,使用 __getattr__ hook动态创建a,或使用 property .

__init__ 方法:

class B(object):
def __init__(self):
self.a = A()

__getattr__ 方法:

class B(object):
def __getattr__(self, attr):
if attr == 'a':
self.a = A()
return self.a
raise AttributeError(attr)

属性方法:

class B(object):
_a = None

@property
def a(self):
if self._a is None:
self._a = A()
return self._a

当然,属性和__getattr__方法没有A()实例存储在self上>,它可以只从其他地方返回一个预先存在的 A() 实例。

关于python - 通过 __setattr__ 动态地将类实例添加到 Python 实例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489831/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com