Python メタクラスの使用手順

WBOY
リリース: 2016-06-16 08:47:16
オリジナル
1078 人が閲覧しました

多数のクラスに同じ特性を持たせたいのですが、どうすれば追加できますか?これはテンプレートですか?このテンプレートからクラスのグループを作成すれば問題ありませんか?次にメタクラスが必要になります。 Huo Huo》

メタクラスを定義します (単なるクラスのテンプレートです! あまり考えすぎないでください。ただし、これはオブジェクト レベルではなくクラス レベルであることも覚えておいてください!):

コードをコピーします コードは次のとおりです:

class MyMeta(type):
def __init__(cls,name,bases,dic) :
print cls. __name__
print name
def __str__(cls):return '美しいクラス %s'%cls.__name__

これは何ですか?ああ、これはメタクラスですね。クラステンプレートです。

どこで使用されますか?これは、このクラスのテンプレートとしてクラスで使用する必要があります。

はどのような役割を果たしますか?テンプレートはいくつかの共通の機能を提供します。

このクラスはどのような機能を提供しますか? 2つの特徴、1.クラスが定義された後、クラスの名前 (__init__) を出力します。 2.印刷クラスの形式 (__str__)。

どのように動作するのでしょうか? インタプリタを開き、上記のコードを入力して開始します:

入力:

class MyClass(object):
__metaclass__ = MyMeta

Enter キーを押してクラス定義を終了すると、出力は次のようになります:
MyClass
MyClass

わかりました、ほほう!初期化するのはオブジェクトではなくクラスであることがわかりました。 ! ! ! !これが最初の特徴です。

2 番目:

入力:

print MyClass
出力:

美しいクラス MyClass

ああ、その通りです。 、予想通りでした! ! ! ! ! ! ! !もちろん、クラスを好きなようにカスタマイズすることもできます。 !

########################################### # #####################################

シングルトン パターンの下に実装してみましょう(Woodpecker コミュニティから):

シングルトン メタクラス:
コードをコピー コードは次のとおりです:

class Singleton(type):
def __init__(cls,name,bases,dic):
super(Singleton,cls).__init__(name,bases,dic)
cls.instance = なし
def __call__(cls,*args,**kwargs):
cls.instance が None の場合:
cls.instance = super(Singleton,cls).__call__(*args,**kwargs)
return cls.instance

非常にシンプルなデザインパターンなので、何が起こっているのか理解できると思います。
コードをコピーします コードは次のとおりです:

class MyClass(object):
__metaclass__ = Singleton
def __init__( self,arg):
self.arg = arg

Singleton メタクラスを使用するクラス。

インスタンスは 1 つだけですか? ?私たちはそれを見ることしかできません。鄧小僧はこう言いました。「実践こそが真実を試す唯一の基準だ」。 - エッセンス! !
コードをコピー コードは次のとおりです:

>>> my1 = MyClass("hello")
>>> my2 = MyClass("world")
>>> my1 は my2
True
>>> my1.arg

>>> my2.arg
'hello'

my2 を作成しようとして失敗しましたが、これは成功したことを証明しています。

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