5

私はプロパティ()を読んでいましたが、これは、属性アクセスがプロパティ()で指定されたメソッドを通過することを理解しています。しかし、次のコードを実行すると、「RuntimeError: maximum recursion depth exceeded」が発生しました。

class Property(object):

    def __init__(self):
        self.x = "Raj"

    def gettx(self):
        print "getting x"
        return self.x

    def settx(self, val):
        print "Setting x"
        self.x = val

    def dellx(self):
        print "deleting"
        return self.x

    x = property(gettx, settx, dellx, "I'm object property")


p = Property()
print "p.x", p.x
p.x = "R"
print "p.x:", p.x

この方法でプロパティを適用することはできませんか。「self.x」が「self._x」と「self.__x」に変更されたときに正常に機能したためです。

4

2 に答える 2

12

このエラーは、次の無限再帰ループが原因です: 、およびアクセス メソッドxを使用してプロパティを定義しましたが、アクセス メソッド自体がプロパティにアクセスしようとしています(つまり、自分自身を呼び出しています)。gettxsettxdeltxx

次の行に沿ってコードを記述する必要があります。

class Property(object):

    def __init__(self):
        self.__x = "Raj"  # Class private

    def gettx(self):
        print "getting x"
        return self.__x

    def settx(self, val):
        print "Setting x"
        self.__x = val

    def dellx(self):
        print "deleting"
        return self.__x

    x = property(gettx, settx, dellx, "I'm object property")
于 2013-02-07T10:51:12.053 に答える