--0816多型パンチとレビューアクセス属性

オブジェクト指向三つの特徴:

パッケージ:データとパッケージを構成するクラスのメソッド

継承:サブクラスの継承親クラスのプロパティとメソッドを、多重継承缶

マルチ状態:事は、種々の形態、抽象クラスのサブクラス複数を持って、別のサブクラスのオブジェクトは、別の実行結果を生成し、同じメソッドを呼び出します。多型は、コードの柔軟性を増大させることができます。これは、クラスベースの継承です。

クラスの動物:
     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__:[削除]プロパティ

 

おすすめ

転載: www.cnblogs.com/qingyuu/p/12255571.html