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 (jüngste Aufforderung zuletzt):
Datei "E: \ Python \ test.py", Zeile 32, in
print (obj.BAR)
Attribute: ' Hallo 'Objekt hat kein Attribut' BAR 'Einige Fragen zu Python3 metaclass
Warum Metaklasse UpperAttrMetaclass nicht funktioniert?
Mögliche Duplikat [Python3 Singleton metaclass Methode funktioniert nicht] (http://stackoverflow.com/questions/17237857/python3-singleton-metaclass-method-not-working) – vaultah
Warum diese Frage so wird downvoted ? Es hat ein perfektes Beispiel des Codes und eine gut formulierte Frage (wenn abhängig vom Titel der Frage). – jsbueno