你可以在没有使用装饰器的元类的情况下完成它.这种方式有点清楚IMO:
def apply_defaults(cls):
defaults = {
'default_value1':True,
'default_value2':True,
'default_value3':True,
}
for name, value in defaults.items():
setattr(cls, name, some_complex_init_function(value, ...))
return cls
@apply_defaults
class Settings(object):
pass
在Python 2.6之前,类装饰器不可用.所以你可以写:
class Settings(object):
pass
Settings = apply_defaults(Settings)
在旧版本的python中.
在提供的示例中,apply_defaults是可重用的……好吧,除了默认值在装饰器的主体中是硬编码的:)如果您只有一个案例,您甚至可以将代码简化为:
defaults = {
'default_value1':True,
'default_value2':True,
'default_value3':True,
}
class Settings(object):
"""Your implementation goes here as usual"""
for name, value in defaults.items():
setattr(Settings, name, some_complex_init_function(value, ...))
这是可能的,因为类(在类型意义上)是Python中的对象本身.