オブジェクト指向三つの特徴:
パッケージ:データとパッケージを構成するクラスのメソッド
継承:サブクラスの継承親クラスのプロパティとメソッドを、多重継承缶
マルチ状態:事は、種々の形態、抽象クラスのサブクラス複数を持って、別のサブクラスのオブジェクトは、別の実行結果を生成し、同じメソッドを呼び出します。多型は、コードの柔軟性を増大させることができます。これは、クラスベースの継承です。
クラスの動物: DEF RUN(セルフ): 昇給はAttributeError(' サブクラスは、このメソッドを実装しなければなりません' ) クラス豚(動物): DEF RUN(セルフ): 印刷(' 豚が歩いている' ) クラス・ドッグ(動物): DEF RUN(自己): プリント(「犬実行されている」) DEF FUNC(OBJ):制限の任意の種類せず#パイソン関数パラメータ、クラス自体があってもよいし、オブジェクトクラスであってもよい obj.run() pIGl = )ブタ( D1 = 犬() FUNC(pIGl) FUNC(D1)
多型の意義:オープンクローズ原理
変数のために、私たちはそのサブタイプを知らなくても、その基本タイプを知っておく必要があり、あなたは安心することができ、その呼び出しと同じ方法いんちき();
あなたが新しい機能を必要とする場合、単にいんちき()メソッドを達成ベースのサブクラスを追加し、あなたが元に基づいて機能を拡張することができ、それは、オープンクローズ原則です。
拡張のためのオープン:ベースの新しいサブクラスを可能にします。
修正のため休館:ベースの変更はタイプいんちき()関数を依存していません。
アヒルタイプ
アヒルではなくタイプよりも、行動のオブジェクトタイプに焦点を当てています。継承階層を要求しません。限り挙動は(同様に内部実装)に類似しているようにダックタイピングとみなすことができます。
クラスダック: デフ __init__ (自己、名): self.name = 名前 DEF いんちき(自己): プリント(" GUA GUA " ) クラスマン: デフ __init__ (自己、名): self.name = 名前 DEF いんちき(自己) : プリント(" 女王大人" ) DEF (ダッカー)をdo_quack: ducker.quack() 場合 __name__ == ' __main__ ' : D =ダック(' アヒル' ) 、M =マン(' 男性' ) do_quack(D) do_quack(M)
データ型とイントロスペクション:
1.プライベート属性:パブリック属性とプライベート属性:Attributeクラスを2つのタイプに分け内側に定義されました
2.私有財産の定義:
クラスが直接呼び出すことができます外:_attrシングルアンダースコアで始まります
__Attrプロパティは、二重のアンダースコアで開始します:クラスを直接呼び出すことはできません外で、改名された、_ __attrでクラス名にアクセスする必要性を。
クラスの人々 : #初期化パラメータ DEF __init__ (セルフ、名): self.name = 名前 。自己__age = 18である #メソッドやプロパティが下線付きの二重設定する前には、すなわち、私有財産やプライベートメソッドを設定 DEF ディスプレイ(セルフ): 印刷(「%S D年齢の%」%(self.name、セルフ。__age )) XiaoAi =ピープル(「小さな愛学生」) #私有財産ではなく、外部からのアクセスとして、この年齢層の宿泊施設では、それ以外の場合はエラーになります #印刷(XiaoAi .__年齢) #単一下線表示+クラス名は、私有財産にアクセスすることができます 印刷(XiaoAi._People__age) XiaoAi.displayを()
3. Pythonは真の私有財産を達成することはできませんが、アンダースコアの冒頭で、あなたは擬似私有財産を取得することができます。ルールに従うように、ほとんどのpythonコード:プロパティの始まりを強調するためには、私有財産、唯一の実装の詳細については、非パブリックAPIの一部と見なされています。
4. __dict__: クラスdict__に魔法.__戻り値:クラス属性辞書、方法、例dict__に魔法.__:インスタンスの属性を返す、辞書法; インスタンスメソッド.__ dict__に:.返すプロパティメソッド、メソッド辞書
__doc__: クラスdoc__内の例題ディスプレイを.__:ノートのクラスを返し、例示的な方法のdoc__内の例題を表示.__を。:コメントは方法を記載して返します; モジュールdoc__内の例題は.__を表示:コメントファイルのドキュメントモジュールPYを返します。
__slots__:のみバインド__slotsに許可プロパティクラスのロック範囲、__ = []プロパティのリストがすでにメモリを節約し、パフォーマンスを向上させることができます。
カスタムプロパティへのアクセス
内蔵機能:
GETATTR:魔法のメソッドオブジェクト.__のgetattr __()をトリガー、プロパティを取得します
SETATTR:セットのプロパティ、トリガーマジックメソッドオブジェクト.__ SETATTR __()
delattr:__魔法のメソッドオブジェクト.__ delattrをトリガ削除する属性、()
1. オブジェクト.__ getattr__:私たちは財産を訪問したときに、プロパティが存在しない場合は、トリガされ、(AttrErrorに表示されます)。
2. オブジェクト.__ getattrible__:アクセスプロパティ初めて不動産を探すためのトリガ方法。あなたは、トリガーAttrErrorが見つからない場合。我々は最初のトリガ__getattribute__が、その後、__getattr__トリガするだろう、存在しないプロパティを訪問するために行ったときに
プロパティが存在する場合はAttrErrorを報告していない場合、それは、プロパティの値を返します。
3. オブジェクト.__ setattr__:プロパティの設定
4. オブジェクト.__ delattr__:[削除]プロパティ