面向对象2

2018-06-17 23:34:47来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

类的继承

 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)

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:面向对象1

下一篇:Python的hasattr() getattr() setattr() 函数使用方法详解