Klassen in Python sind ebenfalls Objekte
Bevor wir Metaklassen verstehen, müssen wir zunächst Klassen in Python genauer verstehen. In den meisten Programmiersprachen ist eine Klasse eine Reihe von Codesegmenten, die dazu dienen, zu beschreiben, wie ein Objekt generiert wird. Dasselbe gilt auch für Python.
class ObjectCreator(object): pass mObject = ObjectCreator() print(mObject)
Ausgabeergebnis:
<__main__.ObjectCreator object at 0x00000000023EE048>
Klassen in Python unterscheiden sich jedoch von den meisten Programmiersprachen. In Python kann eine Klasse als Objekt verstanden werden. Ja, hier liegt kein Fehler vor, es ist das Objekt.
Warum?
Denn solange das Schlüsselwort class verwendet wird, erstellt der Python-Interpreter während der Ausführung ein Objekt.
Zum Beispiel:
class ObjectCreator(object): pass
Wenn das Programm diesen Code ausführt, wird ein Objekt im Speicher erstellt und der Name ist ObjectCreator. Dieses Objekt (Klasse) selbst hat die Fähigkeit, Objekte (Klasseninstanzen) zu erstellen, und ist daher eine Klasse. Sein Wesen ist jedoch immer noch ein Objekt, sodass wir die folgenden Operationen daran ausführen können:
class ObjectCreator(object): pass def echo(ob): print(ob) mObject = ObjectCreator() print(mObject) # 可以直接打印一个类,因为它其实也是一个对象 print(ObjectCreator) # 可以直接把一个类作为参数传给函数(注意这里是类,是没有实例化的) echo(ObjectCreator) # 也可以直接把类赋值给一个变量 objectCreator = ObjectCreator print(objectCreator)
Das Ausgabeergebnis ist wie folgt:
<__main__.ObjectCreator object at 0x000000000240E358> <class '__main__.ObjectCreator'> <class '__main__.ObjectCreator'> <class '__main__.ObjectCreator'>