ホームページ  >  記事  >  バックエンド開発  >  Python のメタクラスの簡単な分析

Python のメタクラスの簡単な分析

高洛峰
高洛峰オリジナル
2016-10-17 11:51:33957ブラウズ

メタクラスは通常、クラスを作成するために使用されます。クラス定義を実行するとき、インタプリタはクラスの正しいメタクラスを知っている必要があります。インタプリタはまずクラス属性 __metaclass__ を探します。この属性が存在する場合は、この属性をそのクラスにメタクラスとして割り当てます。この属性が定義されていない場合、親クラスで __metaclass__ が検索され、__metaclass__ 属性がまだ見つからない場合、インタープリターは __metaclass__ という名前のグローバル変数を確認し、存在する場合はそれをメタクラスとして使用します。それ以外の場合、クラスはメタクラスとして types.ClassType を持つ従来のクラスです。

クラス定義を実行するとき、このクラスの正しい (通常はデフォルトの) メタクラスがチェックされます。メタクラスは (通常) 3 つのパラメーターを (コンストラクターに) 渡します: クラス名、基本クラスから継承されたデータのタプル、および(クラスの) 属性辞書。

メタクラスはいつ作成されますか?

#!/usr/bin/env python  
   
print '1. Metaclass declaration'  
class Meta(type):  
    def __init__(cls, name, bases, attrd):  
        super(Meta,cls).__init__(name,bases,attrd)  
        print '3. Create class %r' % (name)  
   
print '2. Class Foo declaration'  
class Foo(object):  
    __metaclass__=Meta  
    def __init__(self):  
        print '*. Init class %r' %(self.__class__.__name__)  
   
# 何问起 hovertree.com
print '4. Class Foo f1 instantiation'  
f1=Foo()  
   
print '5. Class Foo f2 instantiation'  
f2=Foo()  
   
print 'END'  
输出

結果:


1. クラス Foo 宣言

3. クラス Foo f1 インスタンス化

*。

*. Init class 'Foo'

END

クラスが宣言されると、後でクラスオブジェクトの時間を定義するときに __init__( ) クラスのメソッドが呼び出されます。MetaClass の __init__() は、クラスの宣言時に 1 回だけ実行されます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。