我怎么知道什么时候该对自己进行争论?

时间:2019-03-27 23:46:53

标签: python oop self

让我们考虑您正在创建NFS游戏。为此,我们应该有一辆车。汽车可以具有“颜色”,“公司”,“限速”等属性,以及诸如“ change_gear”,“开始”,“加速”,“移动”等方法。 enter image description here

因此,在此示例中,为什么他们在self之后为最后一个函数(在change_gear函数中self之后的gear_type)添加一个参数,而不是其他参数?

2 个答案:

答案 0 :(得分:1)

当您的方法需要执行其他信息并且该信息位于对象外部时,只需在self之后添加一个参数,否则您就可以通过self.attribute

答案 1 :(得分:1)

考虑将对象作为状态容器。更改其内部状态的唯一方法是调用方法。根据先前的状态来启动,停止和加速更改状态,因为他们所需的一切已经包含或可推断出汽车状态,所以它们不需要任何其他工作。现在,您想更改一个齿轮,而要通过其他齿轮或其他齿轮进行更改,因此您的方法需要接收缺少的零件。

将方法当作消息考虑一下,因为与OOP有关,即将方法发送给对象。如果您说要开车,停车或加速,则消息本身就是完整的。现在,如果您说了话,请更改齿轮,您必须在消息中提供一个新的齿轮,以便该消息有意义,可以按您提供的齿轮来更改其齿轮。

在Python中,方法的第一个参数是它自身的对象。这是状态容器。当您调用object.method(arg)时,解释器将其替换为对象,成为object.method(object, arg)。您可以随意命名,但self是已建立的惯例

我希望这对您有帮助