我想创建一个类级的装饰器,它自动向对象添加一个属性,包括适当的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(它们可以用一个简单的属性完成,但它们需要默认值和null保护。我只希望能够指定一个decorator来完成在类的新实例上创建属性的重任。在
如果我在这个方法上有很大的偏差,我对同样可行的方法持开放态度。在
任何帮助都将不胜感激。在
我使用的是python3.X和python2.7,所以最好使用其中一种,但不是必需的。在
更新:我已经增加了一点,我正在寻找更多的品种。一般来说,我需要能够创建许多这些简单的自动属性(alac#auto属性,但是要有一点灵活性)。我不一定要公开后备存储,但我确实想确保对实例化对象(不一定是类)的检查显示已创建的属性。在