私はセッターを持つプロパティを持つクラスを作成しました。このクラスを使用するには2通りの方法があります。そのため、一部のオブジェクトコンポーネントの値はシナリオによって異なる順序で設定されます(__init__
の間に設定したくない)。私はここに独自の集合関数を持つ非財産を含めて、何が働いているのか、何が働いていないのかを示しています。Pythonがプロパティセッターを無視してプロパティゲッターを好む
class Dumbclass(object):
def __init__(self):
self.name = None
self.__priority = None
@property
def priority(self):
return self.__priority
@priority.setter
def priority(self, p):
self.__priority = p
def set_name(self, name):
self.name = "dumb " + name
def all_the_things(self, name, priority=100):
self.set_name(name)
self.priority(priority)
print self.name
print self.priority
次のコマンドを実行すると、TypeError: 'NoneType' object is not callable
が返されます。私はpdbを調べて、セッターの代わりにゲッターをself.priority(priority)
と呼んでいることがわかりました。
if __name__ == '__main__':
d1 = Dumbclass()
d1.all_the_things("class 1")
d2 = Dumbclass()
d2.all_the_things("class 2", 4)
ここでは何が起こっていますか?
python3でも同様のことが確認されています。答えが何か不思議です。 –
@Travis、代入操作が発生し、OPが代入操作を行っていないときにsetterが呼び出される –
...属性を呼び出す*場合は、なぜあなたは 'property'を使用していますか?通常の方法を使用してください。 – Bakuriu