zix*_*ool 4 python attributes class python-2.7 python-3.x
我正在读一本关于python类的书,这是我发现的一个主要问题,在一个例子中__str__
,他使用了一个奇怪的东西,他做了
__class__.__name__
Run Code Online (Sandbox Code Playgroud)
完整的代码是:
def __str__(self):
return '{} {},HP:{},xp:{}'.format(self.col.title(),self.__class__.__name__,self.points,self.exp)
Run Code Online (Sandbox Code Playgroud)
你可以使用self.class并且它对这部分的作者评论起作用我的意思是__class__.__name__
他说.__name__
那是类名的字符串版本,有人可以解释一下我的意思
zon*_*ndo 15
假设您定义了一个类:
class MyClass:
def __str__(self):
return str(self.__class__)
Run Code Online (Sandbox Code Playgroud)
如果您尝试打印该课程,请查看您获得的内容:
>>> instance = MyClass()
>>> print(instance)
__main__.MyClass
Run Code Online (Sandbox Code Playgroud)
这是因为该类的字符串版本包括它所定义的模块.在这种情况下,它在当前正在执行的模块中定义,即shell,因此它显示为__main__.MyClass
.self.__class__.__name__
但是,如果我们使用:
class MyClass:
def __str__(self):
return self.__class__.__name__
instance = MyClass()
print(instance)
Run Code Online (Sandbox Code Playgroud)
它输出:
MyClass
Run Code Online (Sandbox Code Playgroud)
__name__
该类的属性不包括该模块.
注意:该__name__
属性给出了最初给予该类的名称.任何副本都将保留名称.例如:
class MyClass:
def __str__(self):
return self.__class__.__name__
SecondClass = MyClass
instance = SecondClass()
print(instance)
Run Code Online (Sandbox Code Playgroud)
输出:
MyClass
Run Code Online (Sandbox Code Playgroud)
这是因为该__name__
属性被定义为类定义的一部分.使用SecondClass = MyClass
只是为类分配另一个名称.它不会以任何方式修改类或其名称.
归档时间: |
|
查看次数: |
9697 次 |
最近记录: |