Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Python-Metaklassen

So verwenden Sie Python-Metaklassen

php中世界最好的语言
php中世界最好的语言Original
2018-04-09 15:57:021535Durchsuche

Dieses Mal zeige ich Ihnen, wie Sie die Python-Metaklasse verwenden und welche Vorsichtsmaßnahmen für die Verwendung der Python-Metaklasse gelten. Hier ist ein praktischer Fall, werfen wir einen Blick darauf.

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 (jetzt haben Sie es davon 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"}

Das Recht Die Seite des Gleichheitszeichens ist ein Objekt, 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 hat während des gesamten Lebenszyklus eine eindeutige ID-Identifikation ändert sich nicht. Sie können 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 ist zum Beispiel leicht zu verstehen Der Wert von i ist 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 Objekttyp ist auch derselbe wie die ID-Kennung und ändert sich nach seiner Bestimmung nicht.

Klassen und (Instanz-)Objekte

Zusätzlich zum Integer-Typ und String-Typ, die von definiert wurden Das System. Zusätzlich zu Typen wie Listen können wir auch eigene Typen erstellen und diese mit dem Schlüsselwort class definieren. Zum Beispiel:

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

Die Person hier ist eine benutzerdefinierte Klasse. Sie bezieht sich nicht auf Zhang San oder Li Si. Jetzt können wir sie konstruieren (instanziieren). Es entsteht ein bestimmtes, reales, benanntes Objekt, das als Instanzobjekt bezeichnet wird.

>>> p1 = Person("zhangsan")
>>> p1.name
'zhangsan'
>>>
>>> p2 = Person("lisi")
>>> p2.name
'lisi'

Die Klassen p1 und p2 sind die (Instanz-)Objekte nach der Instanziierung. Die Beziehung zwischen der Klasse und dem (Instanz-)Objekt ist wie eine Fahrzeugform an Es hat die gleiche Beziehung wie ein echtes 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, eine Instanz (echtes Auto) ist ) Es ist ein Objekt, und natürlich ist eine Klasse (Form) auch ein Objekt, weil es auch eine reale Sache ist.

Wenn der Python-Interpreter die Schlüsselwortklassenanweisung ausführt, erstellt er eine interne Datei mit dem Namen „Person“-Klasse, diese Klasse ist auch ein Objekt, wir nennen sie ein Klassenobjekt (beachten Sie den Unterschied zwischen Instanzobjekten), sie hat auch eine ID, einen Typ und 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 Person-Klasse nach Typ erstellt wird. Jetzt müssen Sie bedenken, dass p1 und p2 Instanzen sind Objekte und Person ist ein Klassenobjekt. Und was zum Teufel ist das für ein Typ?

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

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

nums ist Liste, der Typ der Liste ist auch Typ, Wörterbuchklasse (dict) ist ebenfalls ein Typ, und die Typen aller Klassen sind Typen, was bedeutet, dass alle Klassen nach Typ erstellt werden. 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)

现在我们都知道类(对象)可以使用 class 关键字创建,我们还知道类(对象)的类型是 type,既然知道了它的类型是 type,那么肯定可以通过 type(元类)来创建。

用元类创建类

前面讲到过,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(类名,基类元组(可以为空), 属性字典)

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Python实现求解最大公约数的方法

在python中numpy与array应该怎样转换

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Python-Metaklassen. 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