呼叫类的其它资讯
在定义方法时,必须有 self 这一引数。这个参数列示某个物件。物件拥有类的所有性质,那么我们可以通过 self,呼叫类属性。

class Human(object):
laugh = ‘hahahaha’
def show_laugh(self):
print self.laugh
def laugh_100th(self):
for i in range(100):
self.show_laugh()

li_lei = Human()          
li_lei.laugh_100th()

这里有一个类属性 laugh 。在方法 show_laugh() 中,通过 self.laugh,呼叫了该属性的值。
 
还可以用相同的方式呼叫其它方法。方法 show_laugh(),在方法 laugh_100th 中 () 被呼叫。
 
通过物件可以修改类属性值。但这是危险的。类属性被所有同一类及其子类的物件共享。类属性值的改变会影响所有的物件。
 
__init__() 方法
__init__() 是一个特殊方法 (special method) 。 Python 有一些特殊方法。 Python 会特殊的对待它们。特殊方法的特点是名字前后有两个下划线。
如果你在类中定义了__init__() 这个方法,建立物件时,Python 会自动呼叫这个方法。这个过程也叫初始化。

class happyBird(Bird):
def __init__(self,more_words):
print ‘We are happy birds.’,more_words

summer = happyBird(‘Happy,Happy!’)

这里继承了 Bird 类,它的定义见上一讲。
 
萤幕上列印:

We are happy birds.Happy,Happy!

我们看到,尽管我们只是建立了 summer 物件,但__init__() 方法被自动呼叫了。最后一行的语句 (summer = happyBird…) 先建立了物件,然后执行:
summer.__init__(more_words)
‘Happy,Happy!’ 被传递给了__init__() 的引数 more_words
 
物件的性质
我们讲到了许多属性,但这些属性是类的属性。所有属于该类的物件会共享这些属性。比如说,鸟都有羽毛,鸡都不会飞。
在一些情况下,我们定义物件的性质,用于记录该物件的特别资讯。比如说,人这个类。性别是某个人的一个性质,不是所有的人类都是男,或者都是女。这个性质的值随著物件的不同而不同。李雷是人类的一个物件,性别是男;韩美美也是人类的一个物件,性别是女。
 
当定义类的方法时,必须要传递一个 self 的引数。这个引数指代的就是类的一个物件。我们可以通过操纵 self,来修改某个物件的性质。比如用类来新建一个物件,即下面例子中的 li_lei, 那么 li_lei 就被 self 表示。我们通过赋值给 self.attribute,给 li_lei 这一物件增加一些性质,比如说性别的男女。 self 会传递给各个方法。在方法内部,可以通过引用 self.attribute,查询或修改物件的性质。
这样,在类属性的之外,又给每个物件增添了各自特色的性质,从而能描述多样的世界。

class Human(object):
def __init__(self, input_gender):
self.gender = input_gender
def printGender(self):
print self.gender

li_lei = Human(‘male’) # 这里,’male’ 作为引数传递给__init__() 方法的 input_gender 变数。
print li_lei.gender
li_lei.printGender()

在初始化中,将引数 input_gender,赋值给物件的性质,即 self.gender 。
li_lei 拥有了物件性质 gender 。 gender 不是一个类属性。 Python 在建立了 li_lei 这一物件之后,使用 li_lei.gender 这一物件性质,专门储存属于物件 li_lei 的特有资讯。
 
物件的性质也可以被其它方法呼叫,呼叫方法与类属性的呼叫相似,正如在 printGender() 方法中的呼叫。
 
总结
通过 self 呼叫类属性
__init__(): 在建立物件时自动执行
类属性和物件的性质的区别
 
 
 
作者:Vamei 出处:http://www.cnblogs.com/vamei