Pythonオブジェクト指向

高洛峰
高洛峰オリジナル
2016-12-01 13:36:211128ブラウズ

クラスのメンバー

1. フィールド

1. 静的フィールド クラス自体を通じてアクセスされます 静的フィールドはクラスコードがロードされるときに作成され、新しいクラス名()を待つ必要はありません

2. アクセスされる通常のフィールドオブジェクトを通じて

2 .メソッド

すべてのメソッドはクラスに属します

1. 通常のメソッドは、最初にクラスのオブジェクトを作成し、次にオブジェクトを通じてそれを呼び出すことしかできません

def show(self): self はクラスオブジェクトです呼び出しメソッド

print(self .name)

を自動的に渡します。 2. 静的メソッド 静的メソッドの呼び出しは、クラス名.メソッド名 () を通じて呼び出され、メモリを節約します。メソッドはPythonの関数であり、パラメーターは自己の必要ではありません。 / プロパティ宣言 // メソッド宣言

DEF ALL_PAGE (SELF): DEF All_PAGE (SELF):

Return 100 Return 100

@all_page.setter All_page はデコレーター @property で定義された関数である必要があります

def all_page(self,value):

pass

obj.all_page = 100 //メソッド以下のセッターデコレータを自動的に呼び出す

@all_page.deleter

def all_page(self):

pass

del obj .all_page //削除デコレーターの下のメソッドを自動的に呼び出します


obj.all_page プロパティ呼び出し 同様のフィールド 同じメソッドを呼び出して関数の戻り値を直接取得します

obj.all_page() .

foo = プロパティ( func1, func2, func3)

func1, func2, fun3 はすべて class

クラス名.foo で定義されているメソッドです プログラムは func1 メソッドを実行し、func1 の戻り値を取得します


クラス名.foo = " newvalue" 実行func2 メソッド

メンバー修飾子

デフォルトのフィールドとメソッド名は public です。フィールドとメソッドの前に __ を追加すると、__name フィールドはプライベート メンバーになります

プライベート メンバーはクラスのみ にすることができます。自身によってアクセスされ、サブクラスは親クラスのプライベート メンバーにアクセスできません


クラスの特別なメンバー

obj=Foo() Foo クラスの __init__ 組み込みメソッドを呼び出し、obj オブジェクトを同時に

obj( ) Foo()() Foo クラスの __call__ 組み込みメソッドを呼び出します。 この構文は python にのみ存在します

__str__ 関数:

obj = Pager() print(obj) #<__main__ 0x00000000006E3B00 の .Pager オブジェクト> ;

obj = Pager() print(obj.__dict__) #{'name':'333'} 出力値は dict 型のデータです

def __str__(self) を定義します: return "{name : obj.name}"

print(obj) #{name:333} 出力は、オブジェクト


__dict__ function:

(obj はオブジェクト) obj のメモリアドレスではなく、オブジェクトの文字列情報です。 __dict__ 任意のオブジェクトを入れる カプセル化されたデータを全てdict

に変換する (Pagerはクラスです) Pager.__dict__ 任意のクラスに含まれるメンバー情報をdict

に変換します __getitem__(self,item) __setitem(self,key,value) __delitem__( self,key) function :

obj = Foo()

obj['aa'] #Foo クラスの __getitem__ を自動的に呼び出す

obj['aa']=22 #Foo クラスの __setitem__ を自動的に呼び出す

del obj[ ' aa'] #Foo クラスの __delitem__

__iter__ 関数を自動的に呼び出します

オブジェクトはデフォルトでは反復できません。オブジェクトが配置されているクラスで __iter__ 関数が定義されている場合、オブジェクトは反復できます

isinstance ret=isinstance(obj,Foo) オブジェクト obj がクラス Foo または Foo の親クラスのオブジェクトであるかどうかを確認します

issubclass ret=issubclass(Foo,Bar)

super と Decorator の機能的な違い (forコード拡張子)

1. デコレーターを使用して、元々他の人が書いた関数実行プロセスに独自のコードを追加できますが、ソース コード ファイル内の関数

にデコレーター構文シュガーを追加する必要があります

2. super と を使用します。このメカニズムにより、元のコードをまったく変更せずに、他の人が最初に作成したクラスを継承するサブクラスを追加できます。

サブクラスのカスタム メソッドに、元の関数を追加します。コードの関数拡張を実現します

model = __import__(Path,fromlist=True) Pathは設定項目の文字列read

cls = getattr(model,ClassName) ClassNameは設定項目の文字列read

obj = cls ()

obj.f1()

文字列を介して Python クラスの特定の関数を動的に呼び出します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。