类(Class)
类
· 目的
面向对象的最主要目的是提高程序的重复使用性。
· 包括
属性(attribute)、方法(method)
· 示例
1 class Bird(object): 2 have_feather = True 3 way_of_reproduction = 'egg' 4 def move(self, dx, dy): 5 position = [0,0] 6 position[0] = position[0] + dx 7 position[1] = position[1] + dy 8 return position 9 10 summer = Bird() 11 print 'after move:',summer.move(5,8)
(当括号中为object时,说明这个类没有父类(到头了);当括号中为其他类别时,则括号中类别为父类,详见下例)
· __init__() 方法
__init__() 是一个特殊方法(special method)。Python有一些特殊方法。Python会特殊的对待它们。特殊方法的特点是名字前后有两个下划线。
如果你在类中定义了__init__() 这个方法,创建对象时,Python会自动调用这个方法。这个过程也叫初始化。
1 class happyBird(Bird): 2 def __init__(self,more_words): 3 print 'We are happy birds.',more_words 4 5 summer = happyBird('Happy,Happy!')
这里继承了Bird类。屏幕上打印:We are happy birds.Happy,Happy!
我们看到,尽管我们只是创建了summer对象,但__init__() 方法被自动调用了。最后一行的语句(summer = happyBird...)先创建了对象,然后执行:summer.__init__(more_words),'Happy,Happy!' 被传递给了__init__() 的参数more_words
子类
· 介绍
类别本身还可以进一步细分成子类。在OOP中,我们通过继承(inheritance)来表达上述概念。使用子类可以提高程序的可重复使用性。
· 示例
1 class Chicken(Bird): 2 way_of_move = 'walk' 3 possible_in_KFC = True 4 5 class Oriole(Bird): 6 way_of_move = 'fly' 7 possible_in_KFC = False 8 9 summer = Chicken() 10 print summer.have_feather 11 print summer.move(5,8)
在类定义时,括号里为了Bird。这说明,Chicken是属于鸟类(Bird)的一个子类,即Chicken继承自Bird。自然而然,Bird就是Chicken的父类。Chicken将享有Bird的所有属性。尽管我只声明了summer是鸡类,它通过继承享有了父类的属性(无论是变量属性have_feather还是方法属性move)