2016-04-02 12 views
0

属性として__name__使用します:は私は彼が完全なコードが</p> <pre><code>__class__.__name__ </code></pre> <p>で行うことを、彼は奇妙なことを使用<code>__str__</code> の一部の例であることを見つけるPythonクラス 主な問題で本を読ん

def __str__(self): 
return '{} {},HP:{},xp:{}'.format(self.col.title(),self.__class__.__name__,self.points,self.exp) 

uがself.classを使用することができますし、それは私が__class__.__name__ 彼が言う意味 この部分のライターコメントを働きます。クラス名 の文字列バージョンです__name__誰かが

+0

[何がpythonの属性 "__class__"であるかを見てください](http://stackoverflow.com/questions/8060751/what-in-the-world-is-the-attribute-class- in-python) –

+0

私はすべてそれを見てください – robert

答えて

2

のは、あなたがクラスを定義しましょう何を意味するのか私に説明することができます:

class MyClass: 
    def __str__(self): 
     return str(self.__class__) 

あなたはクラスでは、あなたが得るものに見えることを印刷しようとした場合:

>>> instance = MyClass() 
>>> print(instance) 
__main__.MyClass 

そのクラスの文字列バージョンは、それが中で定義されているモジュールが含まれているためである。この場合には、それが現在実行されているモジュール、シェルで定義されているので、それはとして表示。我々はしかし、self.__class__.__name__を使用する場合:

class MyClass: 
    def __str__(self): 
     return self.__class__.__name__ 

instance = MyClass() 
print(instance) 

それは出力:

MyClass 

クラスの__name__属性はモジュールが含まれていません。

注:__name__属性は、最初にクラスに与えられた名前を与えます。すべてのコピーは名前を保持します。例えば:

class MyClass: 
    def __str__(self): 
     return self.__class__.__name__ 

SecondClass = MyClass 

instance = SecondClass() 
print(instance) 

出力:

MyClass 

__name__属性は、クラス定義の一部として定義されているからです。 SecondClass = MyClassを使用すると、クラスに別の名前を割り当てるだけです。どのような形でも、クラスまたはその名前は変更されません。

+0

woow nice tnx u – robert

関連する問題

 関連する問題