1

セッターとゲッター@propertyのよりpythonishな方法を使用するように指示されました。したがって、次のようなものがあります。

from UserDict import DictMixin

class A(dict):
    def __init__(self, a, b):
        self.a = a
        self.b = b

    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, value):
        self._a = value

    def __getitem__(self, key):
        return getattr(self, key)

    def __setitem__(self, key, value):
        setattr(self, key, value)

    def keys(self):
        return [k for k in self.__dict__.keys() if not k.startswith('_')]

    def do_whatever(self):
        pass


a = A(1,2)
print a.keys()

出力は ['b'] で、最初は期待していませんでしたが、実際には理にかなっています。

問題は、メソッドの名前ではなく、すべてのプロパティ名を取得する方法です。何か案は?

4

1 に答える 1

0

プロパティは記述子として実装されるため、インスタンスではなくクラスに属します。

>>> class Question(object):
...     @property
...     def answer(self):
...         return 7 * 6
... 
>>> q = Question()
>>> q.answer
42
>>> q.__dict__
{}
>>> for key, value in Question.__dict__.iteritems():
...     if isinstance(value, property):
...         print key
...
answer
于 2012-12-07T00:12:33.483 に答える