セクション8.5 Pythonのクラスのメソッドとコンストラクタ__init__関係の__new _深さ分析:ケース詳細な実行やパラメータの順序との関係

クリエイティブコモンズライセンス 著作権:帰属、紙ベースを作成するために他人を許可し、(同じライセンスで元のライセンス契約に基づいて用紙配布する必要がありますクリエイティブコモンズ

セクションにコンストラクタメソッド構文よりも重要である__new __()メソッドを記述し、このセクションでは、ケース__new __(方法の詳細は、その構造と方法との関係)を介して詳細に分析します。
まず、上記の場合
クラスの問題を説明するために、説明した円のこのセクションCirの場合は、基本的な情報が半径RADIUSの唯一つのメンバー、2つのメソッドが含まれている定義、すなわち__newある__()メソッドやコンストラクタ__init __()メソッド。
簡単に視聴情報については、我々は、関連するパラメータや情報の出力値を返します。
コードの第二に、ケース
1クラス定義

class Cir():
   def __new__(cls,*args,**kwargs):
        #看看Python传递给__new__的参数
       print("Python传递给__new__的参数:\n***cls: ",cls,"\n***args: ",args,"\n***kwargs:",kwargs)
       inst = super().__new__(cls)
       print("__new__返回值:",inst)
       return inst
        
   def __init__(self,radius): 
       print("In init,self的值为:",self,", radius的值为:",radius)
           self.radius = radius


2.クラスのインスタンスを作成し、表示する(対話モードの実行)

c=Cir(10)
c #查看c的数据
Cir #查看类的数据

3.ケースのスクリーンショットと解釈


 
三点以下上のスクリーンショットから分かるように:
1)メソッドを__init__方法__new__実行される前に;
2)それが赤ペン標識上図に見ることができるところから、__戻る__new__にnew__親クラスのメソッドを呼び出します;自己インスト値とINIT、C及びインスタンスの例は、アドレスの値が3を示し、同じであり、親クラス__new__のメソッドによって返された後に作成
3)上図の黄色のマーク部から見ることができますパラメータの方法は、CLS __new__ Cirの対応するクラスです。

次のようにこのセクションでは、要約、__new __()メソッドと部分__init__方法との関係によって場合について説明:
__ new__メソッドは、オブジェクト実行、すなわちのインスタンスを返した後1. __new__は、方法__init__方法の前に行われます; __new__方法作成していないインスタンスを実行する前に、パラメータ自己コンストラクタが実行__new__方法の最後のインスタンスの後に送られる前記
2 __new__方法を自動的にPythonが渡されるパラメータ、パラメータが作成インスタンスを含みます「クラス名は」クラスに対応し、作成するインスタンスが渡されたすべてのパラメータを作成します。
Pythonプログラマとは接触を助けていない古い猿の学習Pythonの学習経験の漸進的な導入のための要約記事の旧猿のPython(https://blog.csdn.net/LaoYuanPython)シリーズは、簡単にはPythonを入力することができます世界。
批判を歓迎し、あなたの注意をありがとう!

おすすめ

転載: blog.csdn.net/LaoYuanPython/article/details/93639520