0

我不明白这些是用来做什么的,尤其是self论点?有人可以向我解释一下,为什么你想把它传进去?

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

self编辑:每次看到被传递给函数或类似的东西时,我都会感到非常困惑。

4

3 回答 3

18

self是您正在调用该方法的对象。这有点像this在 Java 中。

__init__在创建每个对象时调用它以对其进行初始化。这就像Java中的构造函数。

因此,__init__只要您想在创建对象时设置对象的任何属性(Java 中的成员变量),您就可以使用它。如果您对“空”对象感到满意,则不需要__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我们在处理参数并适当地更新对象时使用。

有一个问题是为什么 Pythonself在其他语言不需要它时有它。根据Python 常见问题解答

为什么必须在方法定义和调用中显式使用“self”?

首先,更明显的是您使用的是方法或实例属性而不是局部变量......

其次,这意味着如果您想显式引用或调用特定类中的方法,则不需要特殊语法...

最后,对于实例变量,它通过赋值解决了一个语法问题:因为 Python 中的局部变量(根据定义!)是那些在函数体中赋值的变量(并且没有显式声明为全局变量),所以必须有以某种方式告诉解释器分配是指分配给实例变量而不是局部变量,并且最好是语法(出于效率原因)...

于 2009-11-20T11:11:41.633 回答
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()

顺便说一句,你不必叫它自己,你可以随便叫它。它始终是第一个参数。

于 2009-11-20T11:17:22.713 回答
2

将其视为 C++ / Java 中的“this”参数:它用于引用类的实例。

Class Whatever:   
  def __init__(self, some_parameter):   
    self.instance_parameter = some_parameter

__init__其视为类实例构造函数

于 2009-11-20T11:08:38.660 回答