python動的作成クラスを実装する方法の分析
2748 ワード
この例では、pythonがクラスを動的に作成する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
pythonは動的言語として、実行時にクラスを動的に作成する方法(python Creating classes dynamically)です.これはプログラミング時に、クラスを動的に生成し、対応する属性と方法を与えるのに役立つ場合があります.通常、次の2つの方法があります. 1. 条件に従って、ハードコーディングが実現される. 2. type metaclassを用いて実現する.
条件によりハードコーディング
実行後、結果は次のとおりです.
<__main__.foo object=""at=""/>
しかし、実はこれはそんなにダイナミックではありません.プログラムの中でclassの定義を書き終わらせなければなりません.classがオブジェクトである以上、必ず何かから作成することができます.pythonではclassキーを使用するとpythonがこのobjectを自動的に作成します.手動で作成できる方法はtypeメソッドです.これは特殊な方法であり、クラスを作成することができる.typeの構文は次のとおりです.
この文法規則に従って、次の例を示します.
実行結果は次のとおりです.
===dynamic create class===************************************************** 123 test message 123 summer ===dynamic create subclass===************************************************** c-value 123 summer True test message
この例ではtypeを使用してMyClassクラスを作成し、MySubClassを作成してMyClassクラスを継承し、プロパティ、メソッドをバインドします.MySubClassは独自の属性をバインドし、ベースクラスの属性、メソッドを継承します.
これによりpythonでクラスを動的に作成することができ、主な功労者はtypeメソッドであり、なぜtypeがこんなに強いのか、その最終的な原因はtypeがmetaclass、メタクラスであり、クラスを作成するためのクラスである.たとえば、
metaclassとは何か、どのように利用するのか、後述の文章でpython metaclassについて詳しく説明します.
Pythonに関する詳細については、「Pythonオブジェクト向けプログラム設計入門と進級チュートリアル」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python符号化操作テクニックまとめ」、「Python入門と進級クラシックチュートリアル」などのトピックを参照してください.
ここではPythonプログラムの設計に役立つことを願っています.
pythonは動的言語として、実行時にクラスを動的に作成する方法(python Creating classes dynamically)です.これはプログラミング時に、クラスを動的に生成し、対応する属性と方法を与えるのに役立つ場合があります.通常、次の2つの方法があります.
条件によりハードコーディング
def choose_class(name):
if name == 'foo':
class Foo(object):
pass
return Foo # ,
else:
class Bar(object):
pass
return Bar
MyClass = choose_class('foo')
print MyClass # ,
print MyClass() #
実行後、結果は次のとおりです.
<__main__.foo object=""at=""/>
しかし、実はこれはそんなにダイナミックではありません.プログラムの中でclassの定義を書き終わらせなければなりません.classがオブジェクトである以上、必ず何かから作成することができます.pythonではclassキーを使用するとpythonがこのobjectを自動的に作成します.手動で作成できる方法はtypeメソッドです.これは特殊な方法であり、クラスを作成することができる.typeの構文は次のとおりです.
type(name of the class,
tuple of the parent class (for inheritance, can be empty),
dictionary containing attributes names and values)
この文法規則に従って、次の例を示します.
def echo_msg(self):
print self.msg
print '===dynamic create class==='+ '*'*50
MyClass = type('MyClass',(object,),{"a":123,"b":"summer","msg":"test message","echo_msg":echo_msg})
print MyClass.a
myclass = MyClass()
myclass.echo_msg()
print myclass.a,myclass.b
print '===dynamic create subclass==='+ '*'*50
MySubClass = type('MySubClass',(MyClass,),{"c":"c-value"})
print MySubClass.c,MySubClass.a,MySubClass.b
print issubclass(MySubClass, MyClass)
mysubclass = MySubClass()
mysubclass.echo_msg()
実行結果は次のとおりです.
===dynamic create class===************************************************** 123 test message 123 summer ===dynamic create subclass===************************************************** c-value 123 summer True test message
この例ではtypeを使用してMyClassクラスを作成し、MySubClassを作成してMyClassクラスを継承し、プロパティ、メソッドをバインドします.MySubClassは独自の属性をバインドし、ベースクラスの属性、メソッドを継承します.
これによりpythonでクラスを動的に作成することができ、主な功労者はtypeメソッドであり、なぜtypeがこんなに強いのか、その最終的な原因はtypeがmetaclass、メタクラスであり、クラスを作成するためのクラスである.たとえば、
Class=MetaClass()
instance=Class()
metaclassとは何か、どのように利用するのか、後述の文章でpython metaclassについて詳しく説明します.
Pythonに関する詳細については、「Pythonオブジェクト向けプログラム設計入門と進級チュートリアル」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python符号化操作テクニックまとめ」、「Python入門と進級クラシックチュートリアル」などのトピックを参照してください.
ここではPythonプログラムの設計に役立つことを願っています.