Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Metaklasseninstanz Analysis_python

Python-Metaklasseninstanz Analysis_python

不言
不言Original
2018-04-04 16:14:291230Durchsuche

In diesem Artikel wird hauptsächlich die Analyse von Python-Metaklasseninstanzen vorgestellt. Die Hauptaufgabe dieses Artikels besteht darin, jedem ausführlich zu erklären, was Metaklassen sind.

Onkel Turtle hat Python erfunden In diese Sprache sind eine Reihe von Konzepten integriert, wie zum Beispiel: Iteratoren, Dekoratoren, Funktionen, Generatoren, Klassen, Objekte, Coroutinen usw.

Keines dieser Konzepte scheint für Anfänger leicht zu verstehen, aber es gibt Konzepte, die schwieriger sind als dieses. Obwohl wir es selten direkt verwenden, verwenden wir es. , es ist der heutige Protagonist ------ Metaklasse.

Meine heutige Aufgabe besteht darin, gründlich zu verstehen, was Metaklassen sind. Werfen wir einen Blick darauf.

Um Metaklassen zu verstehen, beginnen wir mit Objekten.

Objekt (Objekt)

Python Alles ist ein Objekt, Sie müssen diesen Satz gehört haben (Sie haben ihn jetzt gehört), eine Zahl ist ein Objekt, eine Zeichenfolge ist ein Objekt, eine Liste ist ein Objekt und ein Wörterbuch ist ein Objekt, zum Beispiel:


>>> i = 10
>>> s = "abc"
>>> nums = [1,2,3]
>>> dicts = {"name":"zhang"}


Die rechte Seite des Gleichheitszeichens ist das Objekt und die linke Seite ist der Name, der diesen Objekten gegeben wird. Jedes Objekt hat drei Schlüsselattribute: Identität, Wert und Typ.

Identifikation

Identifikation ist dasselbe wie die Ausweis-ID einer Person. Jedes Objekt verfügt über eine eindeutige ID-Identifikation, die sich während des Vorgangs nicht ändert Da sich der gesamte Lebenszyklus ändert, können Sie sich den Bezeichner als die Adresse dieses Objekts im Computerspeicher vorstellen. Die ID eines Objekts kann über die Funktion id() angezeigt werden.


>>> id(i)
40592592
>>> id(s)
44980584


Objektwert

Der Wert des Objekts Zwei Attribute sind Werte, die leicht zu verstehen sind. Beispielsweise ist der Wert von i 10, der Wert von s ist abc und der Wert von nums ist 1,2,3.

Typ

Ein weiteres sehr wichtiges Attribut eines Objekts ist sein Typ. Jedes Objekt hat seinen eigenen Typ und das Objekt besteht aus ihm Es wird aus einem Typ erstellt. Der Typ von i oben ist beispielsweise int, und dieses Objekt wird aus int erstellt. Der s-Typ ist ein String-Typ, der nums-Typ ist ein Listentyp und der dicts-Typ ist ein Dictionary-Typ. Sie werden alle aus den entsprechenden Typen erstellt.

Sie können den Objekttyp über type() überprüfen.


>>> type(i)
<class &#39;int&#39;>
>>> type(s)
<class &#39;str&#39;>
>>> type(nums)
<class &#39;list&#39;>
>>> type(dicts)
<class &#39;dict&#39;>


Der Typ des Objekts ist auch derselbe wie die ID-Kennung und ändert sich nach der Bestimmung nicht .

Klassen und (Instanz-)Objekte

Zusätzlich zu den Integer-Typen, String-Typen, Listen und anderen Typen, die von der definiert wurden system, Wir können auch unsere eigenen Typen erstellen, die mit dem Schlüsselwort class definiert werden. Zum Beispiel:


>>> class Person:
  # 这里的 self 指某个实例对象自己
...  def __init__(self, name):
   # name 是实例的属性
...   self.name = name
  # live 是类的属性
  live = True


Die Klasse hier ist eine benutzerdefinierte Klasse und bezieht sich nicht auf Zhang San. Nicht Li Si, jetzt können wir ein bestimmtes, reales, benanntes Objekt konstruieren (instanziieren), indem wir diese Klasse aufrufen. Dieses Objekt wird als Instanzobjekt bezeichnet.


>>> p1 = Person("zhangsan")
>>> p1.name
&#39;zhangsan&#39;
>>>
>>> p2 = Person("lisi")
>>> p2.name
&#39;lisi&#39;


p1 und p2 sind hier die (Instanz-)Objekte nach der Instanziierung, und die Typen dieser beiden Objekte sind Personenklassen , ist die Beziehung zwischen der Klasse und dem (Instanz-)Objekt dieselbe wie die Beziehung zwischen einer Fahrzeugform und einem realen Auto, das gebaut wird.


>>> p1
<__main__.Person object at 0x0195AA30>
>>> type(p1)
<class &#39;__main__.Person&#39;> # 这里的__main__是模块名称


Klassen sind auch Objekte (auch Klassenobjekte genannt)

Wir haben gerade gesagt, dass alles ein Objekt ist, die Instanz (echtes Auto) ein Objekt ist und die Klasse (Form) natürlich auch ein Objekt ist, weil es auch eine reale Sache ist,

Wenn der Python-Interpreter die Schlüsselwortklasse-Anweisung ausführt, wird intern eine Klasse mit dem Namen „Person“ erstellt. Diese Klasse ist auch ein Klassenobjekt (beachten Sie den Unterschied zwischen Instanzobjekten). ID-Bezeichner und ein Typ, hat einen Wert. Zum Beispiel:


>>> id(Person)
26564024
>>> type(Person)
<class &#39;type&#39;>
>>> Person
<class &#39;__main__.Person&#39;>


Wir haben festgestellt, dass der Typ dieses Person-Klassenobjekts „Typ“ heißt, was bedeutet, dass Die Personenklasse wird nach Typ erstellt. Jetzt müssen Sie bedenken, dass p1 und p2 Instanzobjekte sind und Person ein Klassenobjekt ist. Und was zum Teufel ist das für ein Typ?

Lassen Sie uns überprüfen, dass der Typ des Instanzobjekts p1 das Klassenobjekt Person ist und der Typ der Person Typ ist


>>> nums = [1,2,3]
>>> type(nums)
<class &#39;list&#39;>
>>> type(list)
<class &#39;type&#39;>


Der Typ von Nums ist eine Liste, der Typ einer Liste ist ebenfalls ein Typ, der Typ einer Wörterbuchklasse (dict) ist ebenfalls ein Typ, der Typ aller Klassen ist ein Typ, das heißt, alle Klassen werden von erstellt Typ. Dieser Typ ist die Metaklasse, die eins hervorbringt, eins bringt zwei hervor und drei bringt alle Dinge hervor. Die Metaklasse ist der Schöpfer in Python. (Die Metaklasse selbst ist auch ein Objekt)

Jetzt wissen wir alle, dass Klassen (Objekte) mit dem Schlüsselwort class erstellt werden können, und wir wissen auch, dass der Typ von a Klasse (Objekt) ist Typ. Da man weiß, dass sein Typ Typ ist, kann er definitiv durch Typ (Metaklasse) erstellt werden.

Klassen mit Metaklassen erstellen

前面讲到过,type 有一个作用是用于检查对象的类型,其实它还有另外一个作用就是作为元类动态地创建类(对象)。


>>> Person = type("Person", (), {"live":True})
>>> Person
<class &#39;__main__.Person&#39;>


Person 就是一个类,它等价于:


>>> class Person:
...  live = True
...
>>> Person
<class &#39;__main__.Person&#39;>


用元类 type 创建类的语法是:

type(类名,基类元组(可以为空), 属性字典)

总结

以上所述是小编给大家介绍的 Python 元类实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


相关推荐:

Python解析JSON的实例分享

分析Python解析XML的几种方式


Das obige ist der detaillierte Inhalt vonPython-Metaklasseninstanz Analysis_python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn