2016-11-06 8 views
-2

以下の2つの方法でクラス 'Employee'を作成しました。私は、これらのインスタンスメソッドは、オブジェクトのインスタンス化なしでクラス自体からアクセスできないことを知っています。オブジェクトをインスタンス化せずにインスタンスメソッドにアクセスする方法を教えてください。

しかし、次のコードはオブジェクトのインスタンス化なしでどのように動作しますか?

>>> class Employee: 
    def __init__(self,name): 
     self.name = name 
    def getName(self): 
     return self.name 

>>> Employee('John Doe').getName()  #how this code is working?? 
'John Doe' 

上記のコードでは、オブジェクトのインスタンス化の兆候は見られません。しかし、それは働いている、どのように?

+2

'Employee( 'John Doe')'はオブジェクトをインスタンス化します。 – Keiwan

答えて

0

お客様doインスタンスを作成します。それはクラスを呼び出すとを何だ、それはインスタンスを作成します。

>>> Employee('John Doe') 
<__main__.Employee instance at 0x1042bab48> 

あなたは同じ表現でそれを使用できるようにストアインスタンスする必要はありません。 .getName()属性ルックアップをタックしてEmployee('John Doe')部分の結果を呼び出すと、メソッドを参照して同じステートメントに呼び出すだけで済みます。

割り当ては、インスタンスを後で参照できるように、作成したインスタンスへの新しい参照を作成するだけです。その名前付きリファレンスを使用すると、Pythonはメソッドを呼び出すためにインスタンスを再び取得します。

は、インスタンスの上で作成して、次の出力を比較します

>>> employee = Employee('John Doe') 
>>> employee 
<__main__.Employee instance at 0x1042bac68> 

唯一の違いは、今、私は名前employeeと変数にインスタンスを作成した結果を格納していることです。その名前を再び使用すると、インスタンスが再度エコーされます。 Pythonのに

はその後、Employee('John Doe').getName()employee.getName()両方は、インスタンスの属性getNameを検索し、それを呼び出すを使用しての間に違いはありません。

+0

したがって、クラスの属性を使用するためにインスタンスに変数(参照名)を割り当てることは必須ではありません。私は願っています。 –

+0

@PrakashBhattarai:実際、インスタンスを保持する必要はありません。 1つのメソッドを呼び出すだけであれば、それはうまくいきます。 –

関連する問題