self 是您正在调用该方法的对象。有点像Java中的this。
__init__ 在创建每个对象时对其进行初始化以对其进行初始化。就像Java中的构造函数。
因此,当您想在创建对象时设置对象的任何属性(Java 中的成员变量)时,您可以使用__init__。如果您对“空”对象感到满意,则不需要 __init__ 方法,但如果您想创建带有参数的对象,则需要一个。
一个例子是:
class StackOverflowUser:
def __init__(self, name, userid, rep):
self.name = name
self.userid = userid
self.rep = rep
dave = StackOverflowUser("Dave Webb",3171,500)
然后我们可以查看我们创建的对象:
>>> dave.rep
500
>>> dave.name
'Dave Webb'
所以我们可以看到__init__ 与self 一起传递给构造函数的参数,self 是对已创建对象的引用。然后我们在处理参数并适当地更新对象时使用self。
问题是为什么 Python 有 self 而其他语言不需要它。根据Python FAQ:
为什么必须在方法定义和调用中显式使用“self”?
首先,更明显的是您使用的是方法或实例属性而不是局部变量...
其次,这意味着如果你想显式引用或调用特定类的方法,则不需要特殊的语法......
最后,例如变量,它解决了赋值的语法问题:因为 Python 中的局部变量(根据定义!)是那些在函数体中赋值的变量(并且没有显式声明为全局变量),所以必须以某种方式告诉解释器赋值是指分配给实例变量而不是局部变量,并且最好是语法(出于效率原因)...