在Python中,如何在描述符上调用实例方法?

时间:2014-04-03 16:26:06

标签: python descriptor

给定带有额外方法MyDescriptor的描述符类describe,以及使用描述符定义属性a的类,如何在{{1}上调用方法describe }?

a

当我创建一个MyClass实例时,将其属性a设置为42,然后调用class MyClass(object): a = MyDescriptor() def dump(self): print a.describe() ,我得到:

dump()

我想使用描述符来携带有关其 set 方法被调用方式的元数据。我需要找到一种方法来向描述符实例询问该元数据。

1 个答案:

答案 0 :(得分:2)

要访问描述符对象本身,您需要使用类__dict__属性来调用它。

def dump(self):
    print type(self).__dict__['a'].describe()

有关描述符的更多信息,请阅读Descriptor HowTo Guide

<强>演示:

class MyDescriptor(object):

    def __get__(self, obj, type=None):
        return self._val

    def __set__(self, obj, val):
        self._val = val

    def describe(self):
        return 'inside describe'

class MyClass(object):

    a = MyDescriptor()

    def __init__(self):
        self.a = 42

    def dump(self):
        print 'Inside dump()'
        print self.a.describe()

    def dump2(self):
        print 'Inside dump2()'
        print type(self).__dict__['a'].describe()

MyClass().dump2()
print '-'*20
MyClass().dump()

<强>输出:

Inside dump2()
inside describe
--------------------
Inside dump()

Traceback (most recent call last):
  File "C:\Python27\SO.PY", line 26, in <module>
    MyClass().dump()
  File "C:\Python27\SO.PY", line 19, in dump
    print self.a.describe()
AttributeError: 'int' object has no attribute 'describe'