Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是';自我';和'__初始';Python中的表达式?_Python_Self_Init - Fatal编程技术网

什么是';自我';和'__初始';Python中的表达式?

什么是';自我';和'__初始';Python中的表达式?,python,self,init,Python,Self,Init,我不明白这些用于什么,尤其是self参数?有人能给我解释一下吗?你到底为什么要把这个传给我 另外,我一直认为\uuuu init\uuuu是“初始化”的意思,但我没有想到我以前从未在这里放过任何东西。有人能给我举个简单的例子吗 < >编辑:每次看到“自我>代码>被传递到函数中时,我就变得如此困惑。< P>把C++看作是这个“Cuth/Java:java”中的参数:它用来引用类的实例。 Class Whatever: def __init__(self, some_parameter):

我不明白这些用于什么,尤其是
self
参数?有人能给我解释一下吗?你到底为什么要把这个传给我

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

< >编辑:每次看到“自我>代码>被传递到函数中时,我就变得如此困惑。

< P>把C++看作是这个“Cuth/Java:java”中的参数:它用来引用类的实例。
Class Whatever:   
  def __init__(self, some_parameter):   
    self.instance_parameter = some_parameter

\uuuu init\uuuu
视为类实例构造函数。

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

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

因此,只要您想在创建对象时设置对象的任何属性(Java中的成员变量),就可以使用
\uuuu init\uuu
。如果您对“空”对象感到满意,则不需要
\uuuu init\uuuu
方法,但如果要创建带有参数的对象,则需要一个

例如:

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'
因此我们可以看到
\uuuu init\uuuu
将我们提供的参数与
self
一起传递给构造函数,后者是对已创建对象的引用。然后,当我们处理参数并适当地更新对象时,我们使用
self

有一个问题是,为什么Python有
self
,而其他语言不需要它。根据报告:

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

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

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

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


按照惯例,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()

顺便说一句,你不必称它为自我,你可以随意称呼它。它将始终是第一个参数。

请不要将“Self”大写。它是写在
self
上的。小写字母。你在读什么Python教程?请提供该书的链接或名称。我知道,如果您愿意,“self”会更改范围吗?为了说“我要访问这个值
i
,但首先我需要说它在哪里,因为它不是方法的本地值?”