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
TraceBack (самый последний вызов последнего):
файла "E: \ питон \ test.py", строка 32, в
печати (obj.BAR)
AttributeError: ' Hello 'объект не имеет атрибута' BAR 'Некоторые вопросы о Python3 метакласса
Почему метакласс UpperAttrMetaclass не работает?
Возможный дубликат [Python3 Singleton метод метаклассом не работает] (http://stackoverflow.com/questions/17237857/python3-singleton-metaclass-method-not-working) – vaultah
Почему так downvoted этот вопрос ? Он имеет идеальный пример кода и хорошо сформулированный вопрос (если он зависит от названия вопроса). – jsbueno