6

「coordinate」というプロパティを定義するポイントクラスを作成しようとしています。しかし、それは私が期待するように動作しておらず、その理由を理解することはできません。

class Point:
    def __init__(self, coord=None):
        self.x = coord[0]
        self.y = coord[1]

    @property
    def coordinate(self):
        return (self.x, self.y)

    @coordinate.setter
    def coordinate(self, value):
        self.x = value[0]
        self.y = value[1]

p = Point((0,0))
p.coordinate = (1,2)

>>> p.x
0
>>> p.y
0
>>> p.coordinate
(1, 2)

セッターがこれらの値を「設定する必要がある」にもかかわらず、pxとpyが何らかの理由で設定されていないようです。なぜこれなのか誰か知っていますか?

4

2 に答える 2

10

propertyメソッド(および拡張により、デコレータ@propertyには、新しいスタイルのクラス、つまりサブクラス化するクラスが必要objectです。

例えば、

class Point:

する必要があります

class Point(object):

また、このsetter属性は(他の属性とともに)Python2.6で追加されました。

于 2009-08-26T22:47:45.880 に答える
4

オブジェクトからPointを派生させると、機能します。

class Point(object):
    # ...
于 2009-08-26T22:47:46.893 に答える