我想创建一个类级别的装饰器,自动添加一个属性到一个对象,包括适当的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