在下面的代码中,所有Test()
对象都依赖一个Aux()
帮助器。助手具有属性prop
。我想要的听起来很简单:通过Test
类API导出该属性(仅该属性)。
实际上,将其明确编写非常简单:
class Aux:
def __init__(self):
self._prop = 0
@property
def prop(self):
print("read:", self._prop)
return self._prop
@prop.setter
def prop(self, val):
print("write:", val)
self._prop = val
# other Aux methods here
class Test:
_aux = Aux()
@property
def prop(self):
return self._aux.prop
@prop.setter
def prop(self, val):
self._aux.prop = val
# other Test methods here
# try it out:
t = Test()
print(t.prop) # read: 0
t.prop = 123 # write: 123
print(t.prop)
但是我想过一会儿我可以以某种方式使用直接引用。这是错误的:
class Test:
prop = Aux.prop # WRONG! (references `_prop` attr in this class, not in the helper)
prop = Aux().prop # WRONG! (equals to simple prop = 0)
但也许:
class Test:
prop = property(...) # BUT HOW?
但是过了一会儿我找不到一个简单的prop=...
解决方案。现在我很好奇。是否存在?
有一个类似的问题python @property setter delegation,但对我没有帮助。我不想委派所有事情。