假设我有两个Python类,A和B.我希望能够执行以下操作:
>>> b = B()
>>> b.a.attr1 = 'foo'
>>> b.a.attr2 = 'bar'
其中'a'是A的实例。如果'a'是某些,我就不能使用__setattr__
“原始”类型。除了
>>> b = B()
>>> b.a = A()
>>> b.a.attr1 = 'foo'
>>> b.a.attr2 = 'bar'
答案 0 :(得分:2)
您必须在a
的{{1}}中创建__init__
,使用__getattr__
hook动态创建B
,或使用{{} 3}}
a
方法:
__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()
上,它可能只返回一个预先存在的{来自其他地方的{1}}实例。
答案 1 :(得分:0)
class A(object):
pass
class B(object):
def __init__(self):
self.a = A()
b = B()
b.a.attr1 = 'foo'
b.a.attr2 = 'bar'