面向对象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
今日推荐
周排行