3

プロパティを説明するドキュメントでは、次のように述べられています

追加の関数には、必ず元のプロパティと同じ名前 (この場合は x) を付けてください。

つまり、getter、setter、deleter メソッドはすべて同じ名前でなければなりません。

なんで?また、Python はメソッドのオーバーロードを禁止していますね。

編集: Python 2.6 で実行すると、次のコードが失敗するのはなぜですか?

class Widget(object):
    def __init__(self, thing):
        self.thing = thing
        print self.thing

    @property
    def thing(self):
        return self._thing

    @thing.setter
    def set_thing(self, value):
        self._thing = value


if __name__ == '__main__':
    Widget('Some nonsense here')  

その出力は次のとおりです。

 Traceback (most recent call last):   
 File "widget.py", line 16, in <module>
     Widget('Some nonsense here')     
 File "widget.py", line 3, in __init__
     self.thing = thing 
 AttributeError: can't set attribute

set_thing() の名前を thing() に変更すると、コードは正常に機能します。

4

2 に答える 2

1

プロパティを説明するドキュメントでは、次のように述べられています。

正しくない。これは、プロパティ名をデコレータの一部として使用する方法を説明するドキュメントです。「従来の」方法でプロパティを作成する場合、メソッドには任意の名前を付けることができます。

また、デコレーターがメソッドの作成をインターセプトしているため、オーバーロードはありません。

于 2012-10-04T15:06:15.720 に答える