Comment utiliser les métaclasses Python

php中世界最好的语言
Libérer: 2018-04-09 15:57:02
original
1577 Les gens l'ont consulté

Cette fois je vais vous montrer comment utiliser la métaclasse Python, et quelles sont les précautions d'utilisation de la métaclasse Python Voici un cas pratique, jetons un coup d'oeil.

Ma tâche aujourd'hui est de bien comprendre ce que sont les métaclasses, jetons-y un coup d'œil.

Pour comprendre les métaclasses, commençons par les objets.

Objet (Objet)

Python tout est un objet, vous devez avoir entendu cette phrase (maintenant vous avez entendu parler), un nombre est un objet, une chaîne est un objet, une liste est un objet et un dictionnaire est un objet, par exemple :

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

Le droit Le côté du signe égal est un objet, le côté gauche est le nom donné à ces objets. Tout objet a trois attributs clés : identité, valeur et type.

Identification

L'identification est la même que la carte d'identité d'une personne. Chaque objet possède une identification unique tout au long du cycle de vie. ne changera pas. Vous pouvez considérer l'identifiant comme l'adresse de cet objet dans la mémoire de l'ordinateur. L'ID d'un objet peut être visualisé via la fonction id().

>>> id(i)
40592592
>>> id(s)
44980584
Copier après la connexion

Valeur de l'objet

Le deuxième attribut de l'objet est la valeur. La valeur est facile à comprendre. la valeur de i est 10. La valeur de s est abc et la valeur de nums est 1,2,3.

Type

Un autre attribut très important d'un objet est son type. Tout objet a son propre type, et l'objet est composé de son propre type. Il est construit à partir d'un type. Par exemple, le type de i ci-dessus est de type int et cet objet est construit à partir de int. Le type s est un type chaîne, le type nums est un type liste et le type dicts est un type dictionnaire. Ils sont tous construits à partir des types correspondants.

Vous pouvez vérifier le type d'objet via type().

>>> type(i)
<class &#39;int&#39;>
>>> type(s)
<class &#39;str&#39;>
>>> type(nums)
<class &#39;list&#39;>
>>> type(dicts)
<class &#39;dict&#39;>
Copier après la connexion

Le type d'objet est également le même que l'identifiant, et il ne changera pas une fois déterminé.

Classes et objets (instances)

En plus du type entier et du type de chaîne qui ont été définis par le système, en plus des types tels que les listes, nous pouvons également créer nos propres types et les définir avec le mot-clé class. Par exemple :

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

La personne ici est une classe personnalisée. La classe est un modèle abstrait. Elle ne fait pas référence à Zhang San ou Li Si. Nous pouvons maintenant la construire (l'instancier) en appelant cette classe. . Un objet spécifique, réel et nommé sort, et cet objet est appelé un objet instance.

>>> p1 = Person("zhangsan")
>>> p1.name
'zhangsan'
>>>
>>> p2 = Person("lisi")
>>> p2.name
'lisi'
Copier après la connexion

Les p1 et p2 ici sont les objets (instance) après instanciation. Les types de ces deux objets sont de classe Person. La relation entre la classe et l'objet (instance) est comme un moule de véhicule et. an Cela a la même relation qu’une vraie voiture en construction.

>>> p1
<main.Person object at 0x0195AA30>
>>> type(p1)
<class &#39;main.Person&#39;> # 这里的main是模块名称
Copier après la connexion

Les classes sont aussi des objets (appelés aussi objets de classe)

On vient de dire que tout est un objet, une instance (une vraie voiture ) C'est un objet, et bien sûr une classe (moule) est aussi un objet, car c'est aussi une chose réelle

Lorsque l'interpréteur Python exécute l'instruction de classe mot-clé, il créera un fichier interne nommé. Classe "Person", cette classe est aussi un objet, nous l'appelons un objet de classe (notez la différence entre les objets instances), elle a également un ID, un type et une valeur. Par exemple :

>>> id(Person)
26564024
>>> type(Person)
<class &#39;type&#39;>
>>> Person
<class &#39;main.Person&#39;>
Copier après la connexion

Nous avons remarqué que le type de cet objet de classe Person est appelé "type", ce qui signifie que la classe Person est créée par type. Vous devez maintenant vous rappeler que p1 et p2 sont des instances. objets et Person est un objet de classe. Et c'est quoi ce type ?

Revoyons, le type d'objet d'instance p1 est l'objet de classe Personne, le type de Personne est de type

>>> nums = [1,2,3]
>>> type(nums)
<class &#39;list&#39;>
>>> type(list)
<class &#39;type&#39;>
Copier après la connexion

nums est liste, le type de liste est également type, classe dictionnaire (dict ) est également un type, et les types de toutes les classes sont des types, ce qui signifie que toutes les classes sont créées par type. Ce type est la métaclasse. Tao donne naissance à un, un donne naissance à deux et trois donne naissance à toutes choses. La métaclasse est le créateur en Python. (La métaclasse elle-même est aussi un objet)

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

用元类创建类

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

>>> Person = type("Person", (), {"live":True})
>>> Person
<class &#39;main.Person&#39;>
Copier après la connexion

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

>>> class Person:
...  live = True
...
>>> Person
<class &#39;main.Person&#39;>
Copier après la connexion

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

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

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

推荐阅读:

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!