我想創建一個類級別的裝飾器,自動添加一個屬性到一個對象,包括適當的getter和setter方法和一個支持變量。例如:創建一個類級別的裝飾器,以自動添加一個屬性
@autoproperty("foo", can_get=True, can_set=True, allow_null=False, default_value=0)
@autoproperty("baz", can_get=True, can_set=False, allow_null=True, default_value=0)
@autoproperty("bar")
class SomeNonTrivialClass(object):
def __init__(self):
#lots of stuff going on here
def discombobulate(self):
#this is obviously a very trivial example
local_foo = self.foo;
if (local_foo > 10):
raise RuntimeError("Foo can never be more than 10")
else:
#do whatever with foo
if __name__ == '__main__':
test = SomeNonTrivialClass()
test.foo = 5
test.discombobulate()
test.foo = 11
test.discombobulate()
我經常發現自己創建了大量的「半情結」 getter/setter方法的(他們可能只是一個簡單的屬性來完成,但他們需要的默認值和零保護,我想只是。能夠指定一個裝飾,做創建的類的新實例的屬性繁重。
如果我對這個做法大錯特錯,我打開一個同樣可行的方法。
任何幫助將不勝感激。
我正在使用python 3.X和python 2.7,所以在其中任何一個工作是首選但不是必要的。
更新:我添加了更多的品種,我在找什麼。一般來說,我需要能夠創建很多這些簡單的自動屬性(ala C#自動屬性,但具有更多的靈活性)。我不一定要公開後備存儲,但我確實希望確保對實例化對象(不一定是類)的檢查顯示已創建的屬性。
聽起來你可能想寫一些[自定義描述符](http://me.veekun.com/blog/2012/05/23/python-faq-descriptors/)。 – Eevee 2013-02-28 19:17:26
你的問題是什麼? – 2013-02-28 20:17:00
@Robᵩ我的問題是如何創建一個類實例級別的裝飾器,它將自動在實例化類上創建正確的屬性。 – GrayWizardx 2013-02-28 23:12:47