2017-12-04 2 views
1
class Pizza(object): 
    radius = 2 
    @classmethod 
    def get_radius(self): 
     return self.radius 
>>>print Pizza.get_radius is Pizza().get_radius 
    False 

classmedthodがクラスオブジェクトに属しているため、結果はTrueと思います。python(2.7)のclassmethodの定義によると、なぜcode snipptの結果は真ではないのですか?

+0

'ピザ()。get_radius ==ピザ(Noneのようなシングルトンを除く)は、最小のメリットと、isを避ける方が良いでしょう.get_radius'が 'True'に評価されます –

+0

ああ、ありがとうございます、なぜですか?彼らは異なるメモリIDを持っているので? – async

答えて

0
>>> Pizza.get_radius() 
2 

>>> Pizza().get_radius 
<bound method type.get_radius of <class 'Pizza'>> 

Pizza.get_radius()と入力すると、関数が呼び出され、結果が得られます。 Pizza().get_radiusと入力すると、まず新しいピザオブジェクトが開始され、その関数を実際に呼び出すことはありません。

+0

もう一度 'Pizza.get_radiusはPizza()です。get_radius':関数呼び出しがありますか? –

0

あなたがPizzaをインスタンス化するときは、同じコードに異なるIDが、ポイントを持っているget_radius機能を得る:

>>> id(Pizza().get_radius) 
50027464 
>>> id(Pizza.get_radius) 
41275656 

OKレフリーが異なっているが、内容は同じです。

>>> Pizza.get_radius.__func__ is Pizza().get_radius.__func__ 
True 

関数オブジェクトは同じであり、==を使用した場合も、Trueが得られます。

>>> Pizza().get_radius == Pizza.get_radius 
True 
それはあまりにも多くの実装に依存しますので

ので、文字列や整数、または何を比較するときのように、それは

+0

ありがとうございます。 – async

関連する問題