Possible Duplicate:
Python init and self what do they do?
有人能解释一下__init__(self)的作用吗?我一直在读其他的问题和人们提到的超级课程?什么是超级班?我以为手术应该从
1 2
| def print_word(word):
print word |
__init__(self)是不是有一些特殊情况,因为它有下划线和"self"?对不起,没有具体的术语…仍然在学习。
__init__(self)是在所谓的"类"中使用的一个特殊函数。类允许您定义自己的数据类型/对象,并且当您创建所定义的数据类型/对象的新实例时,将调用此__init__函数。这就像说"嘿,每次你做这些事情,确保你也运行这个代码"。在面向对象编程中,我们称这种函数为"构造函数"。它是一个用来"构造"新对象的函数。self是对实际创建的对象的引用。换句话说,对象在技术上已经在到达__init__函数时创建。__init__只是给你机会初始化对象的各个方面(因此命名为__init__)。
Python是功能、过程和面向对象的范例的混合体。这个__init__业务与对象有关。有关面向对象编程的更多信息,您可以查看维基百科的文章。
__init__是python中类的构造函数。类中由__括起来的方法具有特殊的含义(构造学、运算符实现等)。
- 从技术上讲,它不是一个构造函数。
- 技术上的差异在实践中通常并不重要,除非您处理的是高级的Python技术,例如元类,大多数程序员都不会接触到这些技术。
- 初始化程序可能…__new__将是构造函数。
- __new__也不完全是一个构造函数,更多的是类实例本身的malloc/引用查找系统,这取决于您如何处理它…在我看来,__new__和__init__都像传统的构造函数那样做了一部分,但也做了一些工作之外的事情。似乎最好是避免整个问题,说__new__创建和/或检索实例引用,__init__填充实例的初始状态。
可能重复:python初始化和self它们做什么?
def print_word(word)是一个函数(或方法/过程)。__init__(self)是类中使用的函数。
关于类的python教程的这一节描述了__init__函数。我强烈建议你读整页,顺便说一句。
self是一个任意选择的单词,用来指代类本身;如果你愿意,你可以使用watermelon。看:自我的目的是什么?
用双下划线包装的Python类函数具有特殊的含义。另一个例子是__str__。PEP8(一个重要的Python风格文档)的这一部分解释了Python中下划线的含义。
Superclasses:
- Python类教程的继承部分
- 如何初始化基本(超级)类?
要理解__init__(self, ...)的作用,您必须首先了解类。
类基本上定义了对象的类型。例如,如果我想定义一个Fish的行为方式,我可以从某种形式开始
1 2 3 4 5
| class Fish:
def swim(self):
print"I'm swimming!"
def breathe(self):
print"I'm breathing!" |
然而,这不是一个非常有用的类,因为虽然我们已经定义了一个Fish可以做什么,但是我们不知道如何存储关于Fish的其他基本特性,例如它有多重。
原则上,如果我有一个叫Fish的f,我可以这样做。
但是如果我忘了为一些Fish,比如说一个名为g的Fish,然后尝试在表达式中使用g.weight,python就不会很高兴了——它会抛出一个AttributeError,抱怨Fish instance has no attribute 'weight'。
为了避免这种情况,我们可以为类定义一个构造函数,每次创建新的Fish时,都会将诸如其权重和颜色之类的属性以及您定义的其他属性设置为合理的默认值。在python中,这个构造函数被称为__init__。只要在类中定义它,每次创建该类的新实例时都会调用它。
1 2 3 4 5 6 7
| class Fish:
def __init__(self):
self.weight = 3
def swim(self):
print"I'm swimming!"
def breathe(self):
print"I'm breathing!" |
为类定义的每个函数都采用一个隐含的参数,我们通常将其标记为self。第一个参数总是设置为调用函数的实例。例如,如果我调用
python创建了一个Fish,把它放在f中,然后在上面调用Fish.__init__(f)和Fish.swim(f)。在这种情况下,f中的Fish将其重量设置为3,并将导致"我在游泳!"印刷。
您可以创建不需要使用self参数(称为静态函数)的类函数,但这些函数仅对您可能暂时不会遇到的特定情况有用。python中的类函数通常是实例函数,它将隐式接受self参数。
注意,在上面的示例中,创建的每个Fish的默认权重都将设置为3。如果我们想在创建时指定一个Fish的权重怎么办?好吧,我们可以把__init__()定义为接受一些额外的论点:
1 2 3
| class SuperFish:
def __init__(self, weight = 3):
self.weight = weight |
注意,weight参数的默认值定义为3。因此,我们可以选择指定重量。如果我们只是说def __init__(self, weight):,那么就需要说明重量。
我们现在可以执行以下任一调用:
1 2 3
| a = SuperFish() # creates a SuperFish with a weight of 3
b = SuperFish(42) # creates a SuperFish with a weight of 42
c = SuperFish(weight = 9001) # creates a SuperFish with a weight of 9001 |
希望能为你扫清一切:)
self是指对象本身,__init__是初始化该"self"字段的构造函数。例如,您正在创建一个包含字段"name"和"age"的Person类。在__init__中,您可以通过执行以下操作将默认名称设置为"bob",将年龄设置为36岁:
1 2 3
| def __init__(self):
self._name ="Bob"
self._age = 36 |
这样,每次创建新的Person对象时,默认的名称和年龄将设置为"Bob"和36。