我不明白这些用途是什么,尤其是self
参数?有些人可以向我解释这个问题吗?为什么你想要传递这个呢?
另外,我一直认为__init__
是'初始化',但我没想到以前我从来没有在这里放任何东西。有人可以给我一个简单的例子吗?
编辑:每当我看到self
被传递到函数或类似的东西时,我就会感到很困惑。
答案 0 :(得分:18)
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
。
当其他语言不需要时,有一个问题是为什么Python有self
。根据{{3}}:
为什么必须在方法定义和调用中明确使用'self'?
首先,您更明显的是使用方法或实例属性而不是局部变量...
其次,这意味着如果您想要从特定类中显式引用或调用该方法,则不需要特殊语法...
最后,对于实例变量,它解决了赋值的语法问题:因为Python中的局部变量(根据定义!)在函数体中赋值的那些变量(并且未明确声明为全局),那里必须以某种方式告诉解释器,赋值是为了分配给实例变量而不是局部变量,并且最好是语法(出于效率原因)......
答案 1 :(得分:3)
self是按照惯例,您正在调用方法的对象的实例。
例如:
class MyClass:
"""A simple example class"""
def __init__(self):
print "MyClass class created"
i = 12345
def f(self):
return self.i
# Create an object called a of type MyClass. This will print "MyClass class created"
a = MyClass()
# Run the method - should return 12345
print a.f()
# Make another instance of the class to illustrate they are separate.
b = MyClass()
# Set a.i to another value.
a.i = 1
# Note the result
print a.f()
print b.f()
顺便说一下,你不必自称,你可以随意调用它。它始终是第一个参数。
答案 2 :(得分:2)
将其视为C ++ / Java中的“this”参数:它用于引用类的实例。
Class Whatever:
def __init__(self, some_parameter):
self.instance_parameter = some_parameter
将__init__
视为类实例构造函数。