2012-07-26 29 views

回答

8

__init__(self)是在所谓的“类”中使用的特殊功能。 Classes允许您定义自己的数据类型/对象,并且在创建您定义的数据类型/对象的新实例时调用此函数。这就像说:“嘿,每次你做这些事情之一,确保你也运行这些代码”。在面向对象编程中,我们称这种函数为“构造函数”。这是一个用来“构建”一个新对象的函数。 self是对实际创建的对象的引用。换句话说,这个对象在技术上已经创建了,当你到达你的功能时。 __init__只是让你有机会初始化你的对象的各个方面(因此名称__init__)。

Python是功能,过程和面向对象范例的混合体。这个业务与物体有关。有关面向对象编程的更多信息,您可以检出wikipedia article

+0

很好的解释,新的人来OOP – AdjunctProfessorFalcon 2015-07-02 03:13:07

4

__init__是Python中类的constructor。在类中由__括起来的方法具有特殊的含义(构造,操作符实现等)。

+2

技术上真正有用的,它不是一个构造函数。 – geoffspear 2012-07-26 16:47:49

+1

实际上,技术差异通常并不重要,除非您正在处理高级Python技术,例如元类,大多数程序员都不会碰。 – atomicinf 2012-07-26 16:49:48

+0

Initialiser也许......'__new__'是构造函数。 – 2012-07-26 16:49:56

3

可能重复:Python __init__ and self what do they do?

def print_word(word)是函数(或方法/过程)。 __init__(self)中使用的函数。

这个关于类的Python教程的section描述了__init__函数。我强烈建议阅读整个页面,顺便说一句。

self是一个单词的任意选择来引用类本身;如果你想,你可以使用watermelon。请参阅:What is the purpose of self?

用双下划线包裹的Python类函数具有特殊含义。另一个例子是__str__。 PEP8(一个重要的Python风格文档)的section解释了Python中下划线的含义。


超类:

0

自我是指对象本身和__init__的继承section初始化领域的构造那个“自我”。 例如,您正在创建一个名为“name”和“age”字段的Person类。在__init__,您可以通过设置默认名称为“鲍勃”和年龄36:

def __init__(self): 
    self._name = "Bob" 
    self._age = 36 

这样,每次你创建一个新的Person对象,默认的名字和年龄将被设置为“鲍勃“和36.

1

要理解__init__(self, ...)的作用,您必须首先理解类。

一个类基本上定义了一个对象的类型。例如,如果我想定义如何Fish的行为,我可能会开始了与形式

class Fish: 
    def swim(self): 
     print "I'm swimming!" 
    def breathe(self): 
     print "I'm breathing!" 

不过的东西,这不是一个非常有用的,因为当我们定义什么是Fish可以,我们不知道如何存储关于Fish的其他基本素质,例如它有多重。

原则上,如果我有一个Fish命名为f,我只是做

f.weight = 3 

但是,如果我忘了做,对于一些Fish,说Fish命名为g,然后尝试使用g.weight在一个表达式,Python不会很高兴 - 它会抛出一个AttributeError抱怨Fish instance has no attribute 'weight'。为了避免这种情况,我们可以为我们的类定义一个构造函数,每次创建新的Fish时,都会设置属性,如其权重和颜色以及您定义为合理默认值的任何其他属性。在Python中,这个构造函数被称为__init__。只要你在类中定义它,每当创建该类的新实例时就会调用它。

class Fish: 
    def __init__(self): 
     self.weight = 3 
    def swim(self): 
     print "I'm swimming!" 
    def breathe(self): 
     print "I'm breathing!" 

你定义一个类的每个函数有一个隐含的说法,即我们通常标注为self。这第一个参数始终设置为您要调用该函数的实例。举例来说,如果我调用

f = Fish() 
f.swim() 

Python中创建一个Fish,把它放在f,然后调用Fish.__init__(f)Fish.swim(f)就可以了。在这种情况下,f中的Fish将其权重设置为3,并将导致“我正在游泳!”被打印。

您可以创建不需要采取self参数类的功能,号称静态函数,但这些都是有用的,只有你可能不会一会遇到的具体情况。 Python中的类函数通常是实例函数,这将隐含地采用self参数。

需要注意的是,在上面的例子中,每Fish创建将有它的缺省权重设置为3。如果我们想在创建时指定一个Fish的体重?好了,我们可以定义__init__()采取一些额外的参数:

class SuperFish: 
    def __init__(self, weight = 3): 
     self.weight = weight 

注意,weight说法有定义为3。因此默认值,其实它是可选为我们指定的权重。如果我们刚刚说过def __init__(self, weight):,那么就需要指定重量。

我们现在可以执行以下调用中的任何一个:

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 

。希望清除的东西了你:)

相关问题