6

コードは次のとおりです。

def Property(func):
     return property(**func())

class A:
     def __init__(self, name):
          self._name = name

     @Property
     def name():
          doc = 'A''s name'

          def fget(self):
               return self._name

          def fset(self, val):
               self._name = val

          fdel = None

          print locals()
          return locals()

a = A('John')
print a.name
print a._name
a.name = 'Bob'
print a.name
print a._name

上記は次の出力を生成します。

{'doc': 'As name', 'fset': <function fset at 0x10b68e578>, 'fdel': None, 'fget': <function fget at 0x10b68ec08>}
John
John
Bob
John

コードはここから取得されます。

質問:何が問題なのですか?シンプルなはずなのに見つかりません。

注:属性を単に非表示にするのではなく、複雑な取得/設定のためのプロパティが必要です。

前もって感謝します。

4

2 に答える 2

8

州のドキュメント:property()

新しいスタイルのクラス(オブジェクトから派生したクラス)のプロパティ属性を返します。

あなたのクラスは新しいスタイルのクラスではありません(オブジェクトから継承していません)。クラス宣言を次のように変更します。

class A(object):
    ...

意図したとおりに機能するはずです。

于 2012-05-25T20:39:16.220 に答える
1

(上記の投稿)次の形式を使用してください:http: //docs.python.org/library/functions.html#property

class C(object):
    def __init__(self):
        self._name = "nameless"

    @property
    def name(self):
        """I'm the 'name' property."""
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

    @name.deleter
    def name(self):
        del self._name
于 2012-05-25T21:43:31.480 に答える