2014-09-01 149 views
1

我想動態創建屬性方法。動態創建python屬性函數

這意味着,例如,我希望第一個A級與第二個A級相當。

有什麼辦法嗎?

class A(object): 
    def __init__(self): 
    self._a = 10 
    self.createPropertyMethod(a, self._a, getFunc, setFunc, delFunc) 

    def createPropertyMethod(self, name, value, getFunc, setFunc, delFunc) 
    #TODO 

class A(object): 
    def __init__(self): 
    self._a = 10 

    @property 
    def a(self): 
    return getFunc(self._a) 
    @a.setter 
    def a(self, value): 
    setFunc(self._a, value) 
    @a.deleter 
    def a(self): 
    delFunc(self._a) 

回答

3

你不能,不能在實例property對象需要成爲其工作所依賴的descriptor protocol類的一部分。

您可以使用__getattr__,__setattr____delattr__鉤子動態代理屬性訪問。

+0

在類上創建裝飾器是否可以實現@asleea想要實現的功能?嗯,我不太喜歡新式樣的東西。 – bluefoggy 2014-09-01 15:24:46

+0

@ kingsdeb:類裝飾器會改變類,而不是實例。所以,是的,您可以在裝飾器中創建「屬性」對象,將它們添加到類中並讓它們工作。 – 2014-09-01 15:25:53

+0

@Martin Pieters--請你給我一個更多解釋的代碼嗎? – bluefoggy 2014-09-01 15:27:07