警告:
别试这个
在家里
在工作中。很难看。
我给你三种方法。
班级装饰员
def get_me_some_attributes():
return {'a': 1, 'b': 2}
def add_attributes_to_class(attributes):
def decorate_class(cls):
for name, value in attributes.items():
setattr(cls, name, value)
return cls
return decorate_class
@add_attributes_to_class(get_me_some_attributes())
class A:
pass
测试它:
>>> A.a
1
>>> A.b
2
>>> B = type('B', (object,), get_me_some_attributes())
>>> B
<class '__main__.B'>
>>> B.a
1
>>> B.b
2
>>>
自定义元类
class MySpecialMeta(type):
def __new__(cls, name, bases, namespace):
SPECIAL_STUFF = namespace.pop('SPECIAL_STUFF', {})
namespace.update(SPECIAL_STUFF)
return super().__new__(cls, name, bases, namespace)
class C(metaclass=MySpecialMeta):
SPECIAL_STUFF = get_me_some_attributes()
>>> C
<class '__main__.C'>
>>> C.a
1
>>> C.b
2