2017-12-05 26 views
0
class new: 
    i=1 
    def __init__(self): 
     name='sakthi' 

    def add(self,one,two): 
     return one+two 

k=new.add 

print(k) 

私は上記のプログラムを実行します。私はfunction new.add at 0x0068E270を出力します。Python-クラス内の関数オブジェクト

誰でも私に何が起こったのか、どんな種類の操作を値kで行うことができますか。

答えて

1

kに割り当てるnew.addの値は関数です。 Python 2では、それは特別な "unbound method"オブジェクトでしたが、あなたの出力には、Python 3を使用していることが示唆されています(概念的な点を除いて、任意の関数と同様に

、あなたはselfonetwoのために適切なものは何でも値渡し、あなたがしたい場合kを呼び出すことができます。たとえば、k("foo", 1, 2)(これは3を返します)。

伝統的には、引数はnewクラスのインスタンスでなければなりませんが、Python 3では何も実行されません(このチェックはPython 2のアンバウンドメソッドオブジェクトの目的でした)。したがって、上記の例の文字列を渡すとうまくいきました。selfは関数本体では何も使用されていないためです。 (より複雑なメソッドは、通常、不適切な引数をselfとして渡すと失敗します)。

メソッドを呼び出す一般的な方法は、まずクラスのインスタンスを作成し、そのインスタンスでメソッドを呼び出す方法です。これは、インスタンスが自動的に最初の引数として渡される:CPythonので

x = new() 
x.add(1, 2) # returns 3, x got passed as self 
+0

はい。私はPython 3を使用しています –

1

function new.add at 0x0068E270kのアドレスになります。 kは単なる関数なので、のように何かを行うことができます。5

関連する問題