以下代码和运行时错误消息充分说明了问题。
class A():
def __init__(self, x=None):
self._x = x
@property
def x(self):
return self._x
@x.setter
def x(self, x):
self._x = x
# Make two instances of class A
a = A()
b = A()
# Make each instance contain a reference to the other class instance by using
# a setter. Note that the value of the instance variable self._x is None at
# the time that the setter is called.
a.x(b)
b.x(a)
运行时结果:
Traceback (most recent call last):
File "E:\Projects\Commands\Comands\test\commands\test.py", line 19, in <module>
a.x(b)
TypeError: 'NoneType' object is not callable
我正在使用 Python 3.7.4 运行。
最佳答案
a.x(b)
将:
- 得到
a.x
——此时是None
- 调用
None(b)
-- 这是错误的来源,因为NoneType
不可调用
要使用 setter(它是一个描述符),您需要进行属性分配:
a.x = b
b.x = a
关于Python 在相互依赖的类实例中使用 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58562027/