2016-11-01 20 views
0

私はthis articleを読んでいます。この記事ではラインは言う:クラスCのためPythonクラスの3つの異なるメソッド呼び出し

、CのXインスタンス及びCのメソッドmは、以下 3メソッド呼び出しは等価である:

タイプ(X)・M(X 、...)

のCm(X、...)

XM(...)

私はこのようなプログラムにこの文を変換してみました:

class C: 
    def __init__(self,a,c): 
     self.a=a 
     self.b=c 

    def m(self): 
     d=self.a+self.b 

x=C(1,2) 
x.m() 
print(type(x).m(x)) 
print(C.m(x)) 
print(x.m()) 

しかし、私はこれらの3つの方法が何を意味し、どのように働いているのかを知りませんか?私のプログラムがメソッドを間違って使用している場合は、それを修正してください。

編集

私は、このコードの修正を求めていないです、私はこれらの3つの方法が使用され、各メソッド呼び出しで一例を提供する方法を求めています。

3つの方法ごとに適切な例があれば、私にとって非常に役立ちます。

+1

もしあなたが試して印刷しようとするなら、 'm'が何かを返すようにしたいかもしれません。 –

+0

どのバージョンのPythonをお求めですか? –

答えて

0

あなたのmは何も返されません。 python 2.7を使用している場合あなたのCクラス

1

内のほとんどの

def m(self): 
    return self.a + self.b 

をしたい

、あなたは方法mを知っているtype(x)で正しい型を得るためにobjectからCを導き出す必要があります。

class C(object): 
    def __init__(self,a,c): 
     self.a=a 
     self.b=c 

    def m(self): 
     return self.a+self.b 

x=C(1,2) 
x.m() 
print(type(x).m(x)) 
print(C.m(x)) 
print(x.m()) 

私はPython 3ではこれが暗黙的だと思います。そして、はい、dを計算する代わりに、私は結果を返します - あなたは何かを見ます。あなたの明確化に関する

編集:メソッドを呼び出す

三つの方法は説明のために示されています。可能であれば、私はx.m()を使用しないという明白な理由はありません。しかし、Pythonでは、それはのためのショートカットです:xxのタイプのメソッドmを呼び出してください。 type(x).m(x)は、何が起こっているのかを書くための最もリテラルな方法です。 type(x)C(Python 3の場合、または新しいスタイルのクラスの場合 - 少なくともobjectから派生しています - 少なくともそれ以外の場合)です。したがって、第1および第2の書き込み方法は同等です。

+0

彼は 'print'コールから判断して、彼がPython 3を使っていると思います。いずれにせよ、彼のタグは混乱しているので、彼がScottsのコメントに答えるのを見てみましょう。 –

関連する問題