2016-06-16 33 views
1

クラス属性にアクセスする場合、そのクラスメソッド内でクラス名Fooまたはselfを使用する場合の相違点は何ですか?ClassNameまたはselfでドット構文を使用する場合の違い

>>> class Foo(object): 
...  class_attribute = "Oh Hai" 
...  def bar(self): 
...   print(Foo.class_attribute) 
...   print(self.class_attribute) 
... 
>>> Foo().bar() 
Oh Hai 
Oh Hai 

どちらも機能します。どちらの場合も、私はPythonがクラスのインスタンスを見て、それにバインドされたクラス属性を見つけられないので、クラス属性をチェックしてclass_attributeを探します。

もう一方の方が効率的ですか?

コードの可読性は個人的な好みですか?私に見てClassName.class_attribute以内に使用されているそのクラスは奇妙に見えます。

+1

[Pythonでの静的なクラス変数]の重複の可能性があります(http://stackoverflow.com/questions/68645/static-class-variables-in-python) –

+0

それは能力をカバーするもので、これは推論をカバーします。詐欺ではない。 –

答えて

0
class Baz(Foo): 
    class_attribute = "Hello, World!" 

Baz().bar() 

そして、それらは全く異なる動作をします。効率のためではなく、結果のためのプログラム。

+0

それでは、継承すると違いはありますか?継承していない場合(Fooクラスを孤立して考える)、個人的な好み/コードの可読性以外の違いはありますか?良い例btw、相続のための含意は私に起こらなかった。 – RedCraig

関連する問題