给定带有额外方法MyDescriptor
的描述符类describe
,以及使用描述符定义属性a的类,如何在{{1}上调用方法describe
}?
a
当我创建一个MyClass实例时,将其属性a设置为42,然后调用class MyClass(object):
a = MyDescriptor()
def dump(self):
print a.describe()
,我得到:
dump()
我想使用描述符来携带有关其 set 方法被调用方式的元数据。我需要找到一种方法来向描述符实例询问该元数据。
答案 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'