【发布时间】:2018-12-10 15:34:30
【问题描述】:
我想通过类的实例直接访问我的类的属性中的属性(而不从它继承)。所以基本上如果我有:
class A:
@property
def foo(self):
print("foo")
@property
def bar(self):
print("bar")
class B:
def __init__(self):
self._a = A()
我不想做b._a.bar,而是希望能够做b.bar。基于this answer here,我在B类中尝试了以下内容:
class B:
def __init__(self):
self._a = A()
attrs = [attr for attr in dir(self._a)
if not callable(self._a.__getattribute__(attr))
and not attr.startswith("__")]
for attr in attrs:
setattr(self.__class__, attr,
property(lambda s: s._a.__getattribute__(attr)))
但是在实例化和测试它时,我得到了一个奇怪的 python 时刻:
>>> b = B()
foo
bar
>>> b.foo
bar
>>> b.bar
bar
- 为什么在创建实例时'foo'和'bar'都打印出来了?
- 'foo' 属性如何指向与 'bar' 相同的 getter?
【问题讨论】:
-
你的第二个问题在这里有更详细的答案:stackoverflow.com/questions/10452770/…
标签: python oop properties