使用名称作为属性

2024-04-29 04:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在读一本关于python类的书 我在__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__这是类名的字符串版本 有人能给我解释一下什么意思吗


Tags: 代码nameselfformatreturntitledefcol
1条回答
网友
1楼 · 发布于 2024-04-29 04:17:18

假设您定义了一个类:

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只是给类分配另一个名称。它不会以任何方式修改类或其名称。

相关问题 更多 >