2016-04-02 2 views
0

я прочитал книгу в питона классе главная проблема, что я считаю, что в примере в части __str__ , что он использует странную вещь, что делатьиспользовать __name__ как атрибут

__class__.__name__ 

полный код :

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

и можно использовать self.class и работать писатель комментарий к этой части я имею в виду __class__.__name__ он говорит. __name__ что версия строки имени класса может кто-нибудь объяснить мой, что значит

+0

Взгляните на [Что в мире есть атрибут «__class__» в python] (http://stackoverflow.com/questions/8060751/what-in-the-world-is-the-attribute-class- in-python) –

+0

i все готово смотреть на него – robert

ответ

2

Допустим, вы определяете класс:

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

При попытке напечатать этот класс, посмотрите, что вы получите:

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

это происходит потому, что строка версия класса включает в себя модуль, который он определен. в этом случае, определяются в модуле, который в настоящее время исполняется, оболочки, поэтому он показывает, как __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

Смежные вопросы