什么是';自我';和'__初始';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
是“初始化”的意思,但我没有想到我以前从未在这里放过任何东西。有人能给我举个简单的例子吗
< >编辑:每次看到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
,但首先我需要说它在哪里,因为它不是方法的本地值?”