我不明白这些用于什么,特别是self
的说法?有人可以向我解释这一点,为什么你想要通过这个?Python中'self'和'__init__'表达式的含义是什么?
此外,我一直认为__init__
是'初始化',但它没有发生在我身上,我从来没有必须把任何东西放在这里。有人能给我一个简单的例子吗?
编辑:我只是很困惑,每次我看到self
被传递到一个函数,或类似的东西。
我不明白这些用于什么,特别是self
的说法?有人可以向我解释这一点,为什么你想要通过这个?Python中'self'和'__init__'表达式的含义是什么?
此外,我一直认为__init__
是'初始化',但它没有发生在我身上,我从来没有必须把任何东西放在这里。有人能给我一个简单的例子吗?
编辑:我只是很困惑,每次我看到self
被传递到一个函数,或类似的东西。
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
这个问题。根据Python FAQ:
为什么必须在方法定义和调用中明确使用'self'?
首先,这是比较明显的,你正在使用的方法或实例属性,而不是一个局部变量...
其次,它意味着没有特殊的语法是必要的,如果你想明确地引用或致电方法从一个特定的类...
最后,例如变量它解决了赋值的语法问题:因为Python中的局部变量是(根据定义!)在函数体中分配值的那些变量没有明确地声明为全局的),必须有某种方式告诉解释器,赋值意图分配给实例变量而不是赋给局部变量,它应该最好是句法(出于效率原因)...
把它看作C++/Java中的“this”参数:它用于引用一个类的实例。
Class Whatever:
def __init__(self, some_parameter):
self.instance_parameter = some_parameter
的__init__
觉得作为一个类的实例构造。
自我按照惯例是您正在调用方法的对象的实例。
例如:
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()
顺便说一句,你不必调用它的自我,你可以说它是任何你喜欢的。它将永远是第一个参数。
我明白了,如果你愿意,'自我'会改变范围吗?为了说“即将访问这个值'我',但首先我需要说出它在哪里,因为它不是方法的本地?” – sm1991 2009-11-20 11:19:22
请不要大写“自我”。它写的是“自我”。小写。你在阅读什么Python教程?请提供链接或图书的名称。 – 2009-11-20 11:12:09