这是针对python 3(最新版)。我知道我能做到:
class Foo:
id = some_method_defining_id()
或者
class Foo:
(id, uuid) = some_method_defining_id_and_uuid()
我想有一个方法可以返回多个名字我不知道的类属性:
class Foo:
**some_method_defining_multiple_unknown_attributes() # returns a dict
我知道我可以使用type
以编程方式定义Foo。我也知道我可以在类定义后添加属性。
答案 0 :(得分:0)
警告:请勿在工作中尝试 at home 。这太丑了。
我会给你三种方法。
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