【发布时间】:2021-12-13 21:47:19
【问题描述】:
我知道你们中的一些人会认为这是一个愚蠢的问题,但我还是会问。
为什么我们需要在所有类方法上传递“self”,我们不能像这样不传递它就使用它:
class Player:
def __init__(name):
self.name = name
def print_player_name():
print(self.name)
【问题讨论】:
-
我相信这就是 python 的工作方式。我可以想象
my_player.print_player_name()实际上调用Player.print_player_name(my_player) -
这就像将一个对象传递给函数,只是
self代表类本身。 -
另请注意,您的示例中的方法更恰当地称为“实例方法”。术语“类方法”有点不同,传统上使用
cls而不是self。它们由@classmethod装饰器进行处理,并应用于整个类而不是类的特定对象(或实例)。此外,在实例方法中使用self并在类方法中使用cls只是约定,因为该语言将允许您将其命名为不同的名称。 -
您传递
self以便引用该类的实例。有时您希望一个类的多个实例甚至一个类的实例调用同一类的另一个实例。如果您没有理由在该类的该实例中引用任何其他内容,则可以创建一个staticmethod,它是该类的一部分,但与该类中的数据无关。 -
What is the rationale for closing "why" questions on language design? -- Python 语法需要什么 的问题在这里被反复询问和回答;重新审视它是没有意义的。它是否应该这样做的问题完全是题外话。
标签: python