2011-04-18 35 views
33

我處於非常有用(儘管不是絕對必要)的情況下訪問類的實例方法作爲屬性。 (這是一個使用getattr爲字典設置一些返回值的API,我不想把這個整潔的小東西搞亂)在Python類中作爲屬性訪問函數

我記得讀了一些關於@attribute裝飾器的東西,但是我找不到一個(無論是在Python或Django的)

TL; DR:

如何使這樣的:

class foo: 
    bar = "bar" 
    def baz(self): 
     return "baz" 

做到這一點:

>>> f = foo() 
>>> f.baz 
"baz" 

(編輯爲清楚起見),而不是這樣的:

>>> f = foo() 
>>> f.baz 
<bound method foo.baz of <__builtin__.foo instance at 0x...>> 

回答

57

可以使用@property裝飾。

class foo(object): 
    bar = "bar" 
    @property 
    def baz(self): 
     return "baz" 
+0

謝謝你,這是在我的舌頭上:D – 2011-04-18 16:21:57

12

看看的property裝飾形式。

@property 
def baz(self): 
    return "baz"