__str__
部分示例中发现的主要问题
他使用了他做的一件奇怪的事情
__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 :(得分:11)
我们假设您定义了一个类:
class MyClass:
def __str__(self):
return str(self.__class__)
如果您尝试打印该课程,请查看您的内容:
>>> instance = MyClass()
>>> print(instance)
__main__.MyClass
这是因为该类的字符串版本包含它所定义的模块。在这种情况下,它在当前正在执行的模块中定义,shell,因此它显示为__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
只是为该类指定另一个名称。它不会以任何方式修改类或名称。