【发布时间】:2026-02-05 17:30:02
【问题描述】:
要创建动态类变量,您似乎有两个选择 - 使用 locals() 或 __metaclass__。我不喜欢分配给locals(),但它似乎在类定义中起作用,并且比__metaclass__ 替代方案更简洁。
这样使用locals()靠谱吗?这两种解决方案的优缺点是什么?
meta_attrs = ["alpha", "beta", "gamma"]
class C(object):
local_context = locals()
for attr in meta_attrs:
local_context[attr] = attr.upper()
class D(object):
class __metaclass__(type):
def __new__(mcs, name, bases, attrs):
for attr in meta_attrs:
attrs[attr] = attr.upper()
return type.__new__(mcs, name, bases, attrs)
if __name__ == '__main__':
print C.alpha, C.beta, C.gamma
print D.alpha, D.beta, D.gamma
【问题讨论】:
-
第三个选项是设置属性的类装饰器或工厂函数。
标签: python metaprogramming metaclass