Python在相互依赖的类实例中使用setter

问题描述 投票:0回答:1

以下代码和运行时错误消息完全说明了问题。

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运行。

python python-3.x
1个回答
0
投票

a.x(b)将:

  • 获取a.x-那时是None
  • 调用None(b)-由于NoneType无法调用,这是错误的来源

要使用设置器(它是一个描述符),您需要进行属性分配:

a.x = b
b.x = a
© www.soinside.com 2019 - 2024. All rights reserved.