ホームページ > バックエンド開発 > Python チュートリアル > Python メタクラス インスタンス分析_python

Python メタクラス インスタンス分析_python

不言
リリース: 2018-04-04 16:14:29
オリジナル
1250 人が閲覧しました

この記事では主に Python メタクラス インスタンスの分析を紹介します。この記事の主な目的は、メタクラスとは何かを皆さんに徹底的に説明することです。

Gui おじさんは Python を発明し、それに多くの概念を統合しました。この言語では、イテレータ、デコレータ、関数、ジェネレータ、クラス、オブジェクト、コルーチンなど。

これらの概念はどれも初心者にとっては簡単に理解できないように見えますが、これよりも難しい概念があります。Python の世界の創造者は、Python を直接使用することはほとんどありませんが、私たちはそれを毎日使用しています。今日の主人公は-----メタクラスです。

今日の私の課題は、メタクラスとは何かを徹底的に理解することです。見てみましょう。

メタクラスを理解するには、オブジェクトから始めましょう。

Object (オブジェクト)

Python すべてはオブジェクトです、あなたはこの文を聞いたことがあるはずです (今聞いたことがあるでしょう)、数値はオブジェクト、文字列はオブジェクト、リストはオブジェクトです、辞書はオブジェクトです。例:


>>> i = 10
>>> s = "abc"
>>> nums = [1,2,3]
>>> dicts = {"name":"zhang"}
ログイン後にコピー


等号の右側はオブジェクトで、左側はこれらのオブジェクトに与えられた名前です。どのオブジェクトにも 3 つの重要な属性があります: ID。 、値、およびタイプ。

ID

ID は個人の ID カード ID と同じであり、ライフサイクル全体を通じて変化することはありません。ID はこのオブジェクトのアドレスと考えることができます。コンピュータのメモリ内にあります。オブジェクトの ID は、関数 id() を通じて表示できます。


>>> id(i)
40592592
>>> id(s)
44980584
ログイン後にコピー


オブジェクトの値

たとえば、i の値は 10、s の値は abc です。 、nums の値は 1、2、3 です。

オブジェクトのもう 1 つの重要な属性は型です。たとえば、上記の i の型は int 型から構築されます。整数。 s 型は文字列型、nums 型はリスト型、dicts 型はすべて対応する型から構築されます。

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;>
ログイン後にコピー


オブジェクトの種類もID識別子と同じで、決定後は変更されません。

クラスと(インスタンス)オブジェクト

システムによって既に定義されている整数型、文字列型、リスト、その他の型に加えて、独自の型を作成し、キーワード class を使用して定義することもできます。例:


>>> class Person:
  # 这里的 self 指某个实例对象自己
...  def __init__(self, name):
   # name 是实例的属性
...   self.name = name
  # live 是类的属性
  live = True
ログイン後にコピー


このクラスは抽象テンプレートであり、Zhang San や Li Si を参照しません。これで、このクラスを呼び出すことで構築 (インスタンス化) できます。特定の実際の名前付きオブジェクトが出現し、このオブジェクトはインスタンス オブジェクトと呼ばれます。


>>> p1 = Person("zhangsan")
>>> p1.name
&#39;zhangsan&#39;
>>>
>>> p2 = Person("lisi")
>>> p2.name
&#39;lisi&#39;
ログイン後にコピー


ここで、p1とp2はインスタンス化後の(インスタンス)オブジェクトであり、これら2つのオブジェクトの型は、クラスと(インスタンス)オブジェクトの関係は、車両の金型とオブジェクトのようなものです。実車が作られるのと同じ関係になります。


>>> p1
<__main__.Person object at 0x0195AA30>
>>> type(p1)
<class &#39;__main__.Person&#39;> # 这里的__main__是模块名称
ログイン後にコピー


クラスもオブジェクトです(クラスオブジェクトとも呼ばれます)

今、すべてがオブジェクトであり、インスタンス(実車)はオブジェクトであり、クラス(モールド)はオブジェクトであると言いました。もちろんオブジェクトでもあります。なぜなら、これも現実のものだからです。

Python インタプリタがキーワード クラス命令を実行すると、内部的に「person」という名前のクラスが作成されます。このクラスもオブジェクトです。インスタンス オブジェクト間の違い)、ID 識別、タイプ、値も持ちます。例:


>>> id(Person)
26564024
>>> type(Person)
<class &#39;type&#39;>
>>> Person
<class &#39;__main__.Person&#39;>
ログイン後にコピー


この person クラス オブジェクトの型は「type」と呼ばれることに気付きました。これは、person クラスが型によって作成されることを意味します。ここで、p1 と p2 がインスタンスであることを覚えておく必要があります。オブジェクト、および Person はクラス オブジェクトです。また、このタイプは一体何でしょうか?

おさらいしましょう。インスタンス オブジェクト p1 の型はクラス オブジェクト person で、person の型は type


>>> nums = [1,2,3]
>>> type(nums)
<class &#39;list&#39;>
>>> type(list)
<class &#39;type&#39;>
ログイン後にコピー


nums は list、リストの型も type、辞書クラスの型です。 (dict) も type です。すべてのクラスの型は type です。これは、すべてのクラスが型によって作成されることを意味します。この型はメタクラスです。Tao は 1 を生み出し、1 は 2 を生み出し、3 はすべてのものを生み出します。 (メタクラス自体もオブジェクトです)

これで、class キーワードを使用してクラス (オブジェクト) を作成できることはわかりました。また、クラス (オブジェクト) の型が 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(类名,基类元组(可以为空), 属性字典)

总结

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


相关推荐:

Python解析JSON的实例分享

分析Python解析XML的几种方式


以上がPython メタクラス インスタンス分析_pythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート