Python-链接getter和setter时不可调用非类型对象

Python-链接getter和setter时不可调用非类型对象,python,Python,我试图使用@property和@propertyName.setter来获取/设置不同属性的值,但在链接多个访问器时会遇到以下问题 这是一个简单的例子,我可以重现我的问题: class Toto: def __init__(self): self._name = None self._label = None @property def name(self): return self._name @name.

我试图使用@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 name为None
回溯(最近一次呼叫最后一次):
文件“/home/radjanidar/projects/music/demo/src/main/script/chainedproperties.py”,第43行,在
塔塔.托托.名称(“提提”)
TypeError:“非类型”对象不可调用

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

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


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

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


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

您已经将name定义为一个属性,它改变了您与之交互的方式

您使用的不是
tata.toto.name(“titi”)
,而是
tata.toto.name=“titi”


您已经将名称定义为一个属性,它可以改变您与它的交互方式

您使用的不是
tata.toto.name(“titi”)
,而是
tata.toto.name=“titi”


我认为在使用setter时,应该使用赋值,而不是调用。例如,tats.toto.name=“titi”哦,你完全正确。。。我来自Java世界,一定要改变我的习惯,我怎么会错过这个。。。非常感谢!我认为在使用setter时,应该使用赋值,而不是调用。例如,tats.toto.name=“titi”哦,你完全正确。。。我来自Java世界,一定要改变我的习惯,我怎么会错过这个。。。非常感谢!