要理解__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
。希望清除的东西了你:)
很好的解释,新的人来OOP – AdjunctProfessorFalcon 2015-07-02 03:13:07