面向对象2



类的继承

 

   1 class person(object):

2     def __init__(self,name,age):

3         self.name = name

4         self.age = age

5

6     def info(self):

7         print("the person's name is %s age is %d"%(self.name, self.age))

8

9 class yello_person(person):  #继承person类

10     def __init__(self, name, age, level):

11         person.__init__(self, name, age)  #构造函数先继承父类,自己再增加属性参数

12         self.level = level

13

14     def show_level(self):

15         print("the person %s level is %d"%(self.name, self.level))

16

17 y1 = yello_person('zsq', 28, 15)

18 y1.info()  #使用继承父类的方法

19 y1.show_level()  #使用子类自己的方法

 

上面代码中yello_person继承了person父类。

子类中构造函数先对父类的构造函数进行继承;然后加上自己的特有属性。

18,19行示例如何使用对象分别调用父类和子类的方法

 

   1 class SchoolMember(object):

2     Member = 0

3     def __init__(self, name, age):

4         self.name = name

5         self.age = age

6         SchoolMember.regist(self)  #构造函数中直接调用注册方法,给成员数量加1

7     def regist(self):

8         SchoolMember.Member += 1  #操作公有属性

9

10     def display(self):  #打印对象所有属性的方法

11         print('%s info is--'%self.name)

12         for k,v in self.__dict__.items():

13             print('\t', k, '\t',v)

14         print('end ---')

15

16     def __del__(self):  #析构函数,在手动删除某个对象时会对该对象执行。或者整个程序结束时会对所有对象执行,此程序会在程序末尾打印。

17         print('开除了%s'%self.name)

18

19 class Teacher(SchoolMember):

20     '''

21     定义Teacher子类,在初始化时自动完成注册功能。在继承父类基础上增加自己的属性以及方法

22     '''

23     def __init__(self, name, age, salay, course):

24         SchoolMember.__init__(self, name, age)

25         self.salary = salay

26         self.couesr = course

27     def teaching(self):

28         print("%s teaching %s"%(self.name, self.couesr))

29

30 class Student(SchoolMember):

31     def __init__(self, name, age, tuition ):

32         SchoolMember.__init__(self, name, age)

33         self.tuition = tuition

34     def tuition(self):

35         print('%s pay money %d for study'%(self.name, self.tuition))

36

37

38 t1 = Teacher('zsq', 28, 15000, "cloud_compute")

39 t1.teaching() #调用子类方法

40 t1.display() #调用父类方法

41 print(SchoolMember.Member) #打印学校成员,在对象初始化时自动加1

 

 

上面代码中6行示例如何在构造函数中操作公有属性,实现类似全局计数功能。

10行定义的方法示例如何在父类中打印对象的所有属性

 

多态

统一的调用接口,对不同对象有不同的处理逻辑。

 

   1 class Animal(object):

2     def talk(self):

3         print('this is father class')

4

5 class Dog(Animal):

6     def talk(self):

7         print("旺旺旺")

8

9 class Cat(Animal):

10     def talk(self):

11         print("喵喵喵")

12

13 d1 = Dog()

14 c1 = Cat()

15 def animal_talk(obj):   #当前实现统一接口调用不同对象产生不同效果,即多态。可以使用示例函数作为过渡方案

16     obj.talk()   #此处obj为具体的对象,调用对象的talk方法。即子类中重构以后的方法,来实现多态。

17 animal_talk(d1)

18 animal_talk(c1)

 

 

猜你喜欢

转载自yule-maiyewang.iteye.com/blog/2406362