【发布时间】:2017-05-16 13:35:20
【问题描述】:
class UpperAttrMetaclass(type):
var = "test"
def __new__(upperattr_metaclass, future_class_name,
future_class_parents, future_class_attr):
print("hello world")
uppercase_attr = {}
for name, val in future_class_attr.items():
if not name.startswith('__'):
uppercase_attr[name.upper()] = val
else:
uppercase_attr[name] = val
# reuse the type.__new__ method
# this is basic OOP, nothing magic in there
return type.__new__(upperattr_metaclass, future_class_name,
future_class_parents, uppercase_attr)
class Hello(object):
__metaclass__ = UpperAttrMetaclass
bar = "test"
obj = Hello()
print(obj.BAR) # obj has no attribute named BAR
回溯(最近一次通话最后一次):
文件“E:\python\test.py”,第 32 行,在
打印(obj.BAR)
AttributeError: 'Hello' 对象没有属性 'BAR'
为什么元类 UpperAttrMetaclass 不起作用?
【问题讨论】:
-
为什么这个问题被否决了?它确实有一个完美的代码示例和一个精心设计的问题(如果取决于问题标题)。
标签: python python-3.x metaclass