クラスの一部のメンバーの7週目、クラスメソッド、プロパティ、メソッド、およびメソッドのpythonの静的メソッドを学びます

1、静的メソッド:管理する唯一の名目上分類されたが、実際には、静的メソッドで任意のプロパティまたはクラスのインスタンスにアクセスすることはできません。

(1)私たちは、オブジェクトがインスタンス化され、次のコードを見て、dは直接呼び出しを話すことができます()

クラス・ドッグ(オブジェクト):
    デフ__init __(自己、名):
        self.name =名前
    defの話(自己):
        印刷( "%sが話している" %self.name)
D =犬( "陳")
d.talk( )

 (2)私たちはd.eat場合は、直接(呼び出すインスタンス化静的メソッドを、使用した後)の静的メソッドでは、インスタンス化された名前が渡されるので、関数の中で食べていかない、文句を言います。

Dogクラス(オブジェクト):
    DEF __init __(自己、名):
        self.name =名前が@staticmethod   なし実際のクラス関係を持つ#静的メソッドを、しかし呼び出すために、クラス名を経由しなければならない;、インスタンス変数とちょうど同等のものをないクラス変数を呼び出します機能クラスは
    デフ(自己)を食べる:インスタンス化後に渡された#あなたがしたい場合は、あなたがDに渡す必要が渡され、来ていません
        (「%sは%食べているプリント %(self.name s」を、 " バンズ))
D =犬( 『陳』)
d.eat()#エラー(食べる)1つの必要な位置引数不足している : 『自己』を、自己の質量は行かないインスタンス
    

 だから我々は()メソッドを食べにアクセスする場合は、この時間は、あなたは、つまり、機能を変更するには、インスタンスを渡す必要があります

d.eat(D)

 そのようなオブジェクトは、食べるためにD名「陳」伝達関数でインスタンス化することができます。

2.クラスのメソッド

クラスのメソッド:あなたが唯一のクラス変数にアクセスすることができ、インスタンス変数にアクセスすることができません。

以下の手順のように、我々が食べるようになる()メソッドは、オブジェクトのインスタンスに見られる、クラスメソッドとして定義され、コール所与方法はコンストラクタでself.n = 333個の変数を追加し、食べる、エラーまだ記述されたクラスを行いますメソッドは、インスタンス変数にアクセスすることはできません

Dogクラス(オブジェクト):
    __init __(自己、名)DEF:
        self.name名= 
        self.n = 333 @classmethod      #クラスメソッド、クラス変数でのみアクセスすることができ、インスタンス変数にアクセスすることはできません
    デフ(自己を)食べる:#はインスタンス化転送が来ていないされた後、あなたがしたい場合、あなたがDに渡す必要が渡された
        ( "%sは%食べているプリント %(self.name、の「 パン」))
        を印刷(「%S%SですEAT」 %(self.n、 'パン'))
D =犬( "チェン")
d.eat()
    

 そして、我々はドッドクラスの2クラス変数を追加し、次回はあなたがプログラムを実行します。

クラス犬(オブジェクト):
    N = 333 
    名= "HHH" 
    デフ__init __(自己、名):
        合格

 以上のことから、クラスメソッドはクラス変数にアクセスすることができます

3.プロパティメソッド

プロパティメソッド:静的プロパティになるための一つの方法は、

(1)以下の手順:

Dogクラス(オブジェクト):
    __init __(自己、名)DEF:
        self.name名= @Propertyの #attribute 
    DEF(自己を)EAT:
        印刷(%を"%はS%Sが食べている"(self.name、 'バンズ'))
犬= D(「チェン」)
#d.eat()#エラーそのような呼び出しはd.eatべきときd.eat    プロパティ#方法:静的プロパティになるための方法を

    

 この時点で、方法は静的プロパティで食べ、d.eatので、()を呼び出す際に文句を言うだろう、我々は呼び出す必要があります:d.eat

渡されたパラメータが食べる与えると(2)このとき、属性が食べるさAは、パラメータブラケットを通過する方法はありません、そして、同様の機能を記述し食べる、次に転送は、パラメータを渡すことができます。

  eat.setter @ 
    DEF EAT(セルフ、食品):
        印刷( "食品へのSET:"、食品)
D =犬( "陳") プロパティメソッドd.eat:静的プロパティへの方法d.eat = 「包子」    #あなたはパラメータを渡したい場合は、あなたがeat.setter @、同じ機能を記述する必要があります

 次の出力は、上記の手順:包子を参照してくださいが、この場合に渡されます

チェンは包子食べている
食品に設定します。包子を    

   印刷出力の変化に見出される、保存された上記を食べる割り当てB:

Dogクラス(オブジェクト):
    DEF __init __(自己、名):
        self.name名は= 自己.__ =なし食品
     @Propertyが#attribute 
    DEF EAT(セルフ):印刷(、%(self.nameを"%のS%Sが食べています"食品.__セルフ))
     eat.setter @ 
    DEF(セルフ、食品)を食べる:
        、食品): "食品に設定し、"印刷(セルフ.__食品食品= 
D =ドッグ( "陳")
A:の#プロパティ・メソッドd.eat静的プロパティへの道d.eat =「包子」#あなたはパラメータを渡したい場合は、あなたがeat.setter @、同じ機能を記述する必要があります
d.eat
       
        
        

 「包子」を食べに渡されたパラメータは生き残る:結果は以下の通りであります

陳はどれも食べていない
食品に設定を:包子
チェンは包子を食べています

 (3)属性を削除します。同じ関数を記述し、削除し、次に中d.eatエラーを呼び出します

eat.deleter @ 
    DEF(自己)EAT:
        デル自己.__食品
        印刷(「完了削除」)
デルd.eat 
後d.eat#エラー再び呼び出さ私有財産を、削除

 プログラム:(例3)4.特別なクラスメンバー

(1)__コール__()メソッド

  オブジェクトの背後にある__call__ブラケットは、実行をトリガ。

コンストラクタは、オブジェクトによって実行される作成された、すなわちトリガ:クラス名=オブジェクト()メソッドは、オブジェクトのトリガー、すなわち囲ま__call__行われる:オブジェクト()またはクラス()()

D-犬= D(の例として「陳」)は、再直接D()エラーは、我々は、クラスの犬で__call __()メソッドを書きます

クラス・ドッグ(オブジェクト):

        デフ__call __(自己、* argsを、** kwargsから):
        プリント( "実行中の呼び出し"、引数、kwargsから)
D =犬( "陳")
D()#dを=犬( "陳") D()、与犬( "チェン")()一样の
D(1,2,3、名前= 333)

 そして、出力結果を参照してください。

実行中のコール(){} 
走行コール(1、2、3){ '名前':333}

 (2)__のdict __()メソッド

  ときに印刷された辞書の形式でオブジェクトクラスメソッドのインスタンスが、しかし属性のインスタンスを含んでいません

方法#__dict__ 
プリント(犬.__ dict__に)メソッドアウト辞書オブジェクトクラス印刷の形で#ないインスタンスは、インスタンスの属性が含まれていません

   オブジェクトのインスタンスをインスタンス化した後、印刷オブジェクトの属性:

犬= D(「チェン」)
例としてプリント(D .__ dict__にマジック)#呼び出し、唯一すべてのインスタンス変数の印刷
出力を以下の通りである:
{「名前」:「チェン」、「_Dog__food」}なし

(3)__ str__方法:

  私たちは直接インスタンスを印刷する場合、strの方法、メモリアドレスの出力を書いていません

犬= D(「チェン」)
<0x01104B70で__ main__.Dogオブジェクト>として印刷STR法、なしプリント(D)#; STR書き込み方法であれば、印刷対象、方法は、デフォルトの出力値を返します

   私たちは、戻り値のインスタンス化の印刷出力した後、クラスの犬strの方法を記述する場合

    __ __str DEF(セルフ):
        リターン"<OBJ:%S>" self.nameの%の
D =犬( "陳")
印刷(D)のSTR#writeメソッド、印刷対象、デフォルトの出力であれば、戻り値:<OBJ:陳>

 

おすすめ

転載: www.cnblogs.com/wuxiaoru/p/11504768.html