首页 > 解决方案 > Python - 链接getter和setter时无法调用NoneType对象

问题描述

我正在尝试使用@property 和@propertyName.setter 来获取/设置不同属性的值,但是当我链接多个访问器时会遇到以下问题。

这是一个简单的例子,我可以重现我的问题:

class Toto:

    def __init__(self):

        self._name = None
        self._label = None

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value


class Tata:

    def __init__(self):

        self._toto = Toto()

    @property
    def toto(self):
        return self._toto

    @toto.setter
    def toto(self, value):
        self._toto = value

当我执行这个:

tata = Tata()
print("Toto name is", tata.toto.name)
tata.toto.name("titi")
print("Toto name is", tata.toto.name)

我收到以下错误:

Toto name is None
Traceback (most recent call last):
  File "/home/radjanidar/projects/music/demo/src/main/script/chainedproperties.py", line 43, in <module>
    tata.toto.name("titi")
TypeError: 'NoneType' object is not callable

为什么我不能在对象 Toto 上使用 setter 方法?

标签: python

解决方案


这不是你使用属性的方式。基本上,属性是使函数调用像属性一样的方法。在获取和设置它们时,分别调用修饰的 getter 和 setter,而不是执行简单的属性查找。

因此,您想要tata.toto.name = 'titi'.


推荐阅读