Python設計モード3--コンストラクタモード
1385 ワード
コンストラクタモードは、新しいオブジェクトを作成するための設計方法でもあり、C++の虚関数と似ていますが、python自体の虚ベースクラスABCMetaが使用されています.
1.シーンを適用する
あるクラスの関数が多く、実現が複雑で、継承するサブクラスのリロードや論理の再定義が必要な場合が多い.
2.背景基礎:
pythonの虚関数を使用するため、abcモジュールのABCMetaとpythonのクラスがオブジェクトを作成するときの__を理解する必要があります.metaclass__属性の意味.
一般に、あるクラスで定義されている場合_metaclass__=somethingの場合、簡単に言えば、オブジェクトを作成するときに、まず__が見つかります.metaclass__オブジェクトをsomethingし、そのオブジェクトを使用してオブジェクトを作成します.
3.コード:
1.シーンを適用する
あるクラスの関数が多く、実現が複雑で、継承するサブクラスのリロードや論理の再定義が必要な場合が多い.
2.背景基礎:
pythonの虚関数を使用するため、abcモジュールのABCMetaとpythonのクラスがオブジェクトを作成するときの__を理解する必要があります.metaclass__属性の意味.
一般に、あるクラスで定義されている場合_metaclass__=somethingの場合、簡単に言えば、オブジェクトを作成するときに、まず__が見つかります.metaclass__オブジェクトをsomethingし、そのオブジェクトを使用してオブジェクトを作成します.
3.コード:
#coding:utf-8
from abc import ABCMeta,abstractmethod
class Builder():
__metaclass__=ABCMeta
@abstractmethod
def draw_head(self):
pass
@abstractmethod
def draw_body(self):
pass
class Thin(Builder):
def draw_body(self):
print("Draw Thin Body")
def draw_head(self):
print("Draw Thin Head.")
class Fat(Builder):
def draw_body(self):
print("Draw Fat Body")
def draw_head(self):
print("Draw fat Head.")
class Director():
def __init__(self,person):
self.person = person
def draw(self):
self.person.draw_body()
self.person.draw_head()
if __name__ == "__main__":
fat=Fat()
thin=Thin()
director_thin=Director(thin)
director_thin.draw()
director_fat=Director(fat)
director_fat.draw()
#output:
Draw Thin Body
Draw Thin Head.
Draw Fat Body
Draw fat Head.