[英]In Python, how can I call an instance method on a descriptor?
給定一個描述符類MyDescriptor
一個額外的方法describe
和定義一個使用描述符的屬性的類,我怎么能調用的方法describe
的a
?
class MyClass(object):
a = MyDescriptor()
def dump(self):
print a.describe()
當我創建MyClass的實例時,將其屬性a設置為42,然后調用dump()
,我得到:
"AttributeError: 'int' object has no attribute 'describe'".
我想使用描述符來攜帶關於其set方法被調用方式的一些元數據。 我需要找到一種方法來向描述符實例詢問該元數據。
要訪問描述符對象本身,您需要使用類的__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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.