簡體   English   中英

在Python中,如何在描述符上調用實例方法?

[英]In Python, how can I call an instance method on a descriptor?

給定一個描述符類MyDescriptor一個額外的方法describe和定義一個使用描述符的屬性的類,我怎么能調用的方法describea

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM