Python設計モード3--コンストラクタモード


コンストラクタモードは、新しいオブジェクトを作成するための設計方法でもあり、C++の虚関数と似ていますが、python自体の虚ベースクラスABCMetaが使用されています.
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.