Pythonで__init__メソッド

initはその理由の二つの主要な()メソッドセンスを持っています。第一の理由は、オブジェクトのライフサイクルを初期化することで、最も重要なステップであり、各オブジェクトが正しく動作するために、適切に初期化する必要があります後。第2の理由はあるのinit()パラメータの値は、多くの形態をとることができます。

__init__メソッド

 1.デモを使用して

初期化。名前の開始と終了は、二重下線を付していることに注意してください。
使用__init__メソッド
コード例を

コードをコピー
#は/ usr / binに/ Pythonの!
#ファイル名:class_init.py 
クラスPerson:
    デフ__init __(自己、名):
        self.name =名
    sayHi(自己)DEF:
        self.nameの、私の名前は、こんにちは、印刷
P =人( Swaroop)
p.sayHi()
この短い例は、また人(Swaroop).sayHi()のように書くことができる#
コードをコピー

 

輸出

$パイソンclass_init.py 
こんにちは、私の名前はSwaroopです

 

それはしくみ
ここでは、パラメータ名(と、共通のパラメータ自己を)取るよう__init__メソッドを定義します。この__init__では、私たちはまた、名前と呼ばれる新しいフィールドを作成します。彼らは同じ名前を持っているにもかかわらず、彼らは二つの異なる変数であることに注意してください。いいえポイントは、私たちはそれらを区別することができません。

最も重要なことは、我々は、特にこのように、括弧内の__init__メソッドに渡されたパラメータは、バックにクラス名を含む場合、単にクラスの新しいインスタンスを作成し、__init__メソッドを呼び出していませんでしたされています。これは、このアプローチの重要なポイントです。

今、我々は我々のアプローチでself.nameドメインを使用することができます。これは、sayHiプロセスを確認されています。
       __init__方法は、コンストラクタでC、C#やJavaに類似しています 

2.注意点

 

 

 

注1、__ init__は、C#でコンストラクタと等価ではない、それは実行する時が来た、例が構築されてきました。

クラスA(オブジェクト):
    デフ__init __(自己、名):
        self.name =名前
    のgetName(自己)DEF:
        リターン'' + self.name

 

我々は実行すると、

= A( 'こんにちは')

 

とき、それは次のように理解することができます

=オブジェクト.__新しい__(A)
A .__のinit __( 'こんにちは')

 

__init__すなわち、初期化関数の後には、インスタンス化されたオブジェクトです。

 

注2、サブクラスは__init__、インスタンスのサブクラスをオーバーライドすることはできません、自動的に定義されたスーパークラスの__init__を呼び出します。

コードをコピー
クラスB(A):
    DEFのgetName(自己):
        戻り'B '+ self.name 
 
場合__name __ ==' __ MAIN__':
    B = B( 'ハロー')
    印刷b.getName()
コードをコピー

 

しかし、書き換え__init__、インスタンスのサブクラスならば、それはスーパークラスが定義されている__init__暗黙の呼び出しを行くことはありません

コードをコピー
クラスC(A):

    デフ__init __(自己):

        渡す

    デフのgetName(自己):

        戻り'C 
 '+ self.name 

 

場合__name __ ==' __ MAIN__':

    C = C()

    (c.getNameを印刷する)を

 
コードをコピー

 

エラー:「『C』オブジェクトは、属性 『名前』を持っていないはAttributeErrorは」ので、あなたは__init__をオーバーライドする場合は、使用したり、スーパークラスの動作を拡張するために、最高のは、明示的にスーパークラスの__init__を呼び出すことが報告されます。方法

コードをコピー
クラスC(A):

    デフ__init __(自己、名):

        スーパー(C、自己).__のinit __(名)

    デフのgetName(自己):

        リターン'C 
 '+ self.name 

 

場合__name __ ==' __ MAIN__':

    C = C ( 'こんにちは')   


    )(c.getName を印刷
コードをコピー
 

 

 

参考リンクします。https://www.cnblogs.com/insane-Mr-Li/p/9758776.html

おすすめ

転載: www.cnblogs.com/xiohao/p/11280330.html