我想创建一个类级别的装饰器,它会自动将属性添加到对象,包括适当的 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 保护。我希望能够指定一个能够完成繁重工作的装饰器在类的新实例上创建属性。
如果我在这种方法上偏离了基础,我对同样可行的方法持开放态度。
任何帮助,将不胜感激。
我正在使用 python 3.X 和 python 2.7,所以在任何一个中都可以使用的东西是首选但不是必需的。
更新:我在我正在寻找的东西中添加了更多种类。一般来说,我需要能够创建很多这些简单的自动属性(ala C# auto-property,但具有更多的灵活性)。我不一定要公开后备存储,但我确实想确保对实例化对象(不一定是类)的检查显示已创建的属性。