Python中'self'和'__init__'表达式的含义是什么?

时间:2009-11-20 11:06:54

标签: python self init

我不明白这些用途是什么,尤其是self参数?有些人可以向我解释这个问题吗?为什么你想要传递这个呢?

另外,我一直认为__init__是'初始化',但我没想到以前我从来没有在这里放任何东西。有人可以给我一个简单的例子吗?

编辑:每当我看到self被传递到函数或类似的东西时,我就会感到很困惑。

3 个答案:

答案 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__视为类实例构造函数