Python 继承
类的继承(一)
继承
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式主要有2类:实现继承、接口继承。
Ø 实现继承是指使用基类的属性和方法而无需额外编码的能力;
Ø 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法);
在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。
抽象类仅定义将由子类创建的一般属性和方法。
OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。
继承示例(1)
#BlackPerson类 继承 Person类
#动作:
#BlackPerson可调用Person的talk方法
classPerson(object):deftalk(self):print("person is talking...l")classBlackPerson(Person):passb=BlackPerson()
b.talk()#输出结果
#person is talking...l
继承示例(2)
#BlackPerson类 继承 Person类
#动作:
#BlackPerson继承 新增方法walk
#BlackPerson继承 重写父类talk
classPerson(object):deftalk(self):print("person is talking...1")classBlackPerson(Person):deftalk(self):print("person is talking...2")defwalk(self):print("is walking....")
b=BlackPerson()
b.talk()
b.walk()#输出结果
#person is talking...2
#is walking....
继承式列(3)
------------------------------------------------------------------------------------------------------------------------
#BlackPerson类 WhitePerson 类 继承 Person类#动作1:#Person父类 添加name,age元素#注:父类添加元素后,对象也许添加元素否则报错#
#动作2:#BlackPerson类新建构造函数,并继承父类构建函数,先继承后重组。#注:子类需要有父类构造函数内的元素,后可新建元素,调用父类#成员属性下,添加构造函数。
##原理:#注:如图1,当子类函数,获取到name,age元素时,会传给下面父类的#子类元素,父类获取到子类元素会把传到的值,划分给构建函数内的#成员属性,完成先继承后重组的步骤。
#
#动作3:
#注:在子类继承父类后,可新建自己类的成员属性
#
#动作4:
#子类方法下也可使用父类的继承方法
#注:父类.方法(self) 但这样做没有意义。
classPerson(object):def __init__(self,name,age):
self.name= name #self = b self.name = b.name
self.age =age
self.sex= "noraml"
deftalk(self):print("person is talking...1")classBlackPerson(Person):def __init__(self,name,age ,strength): #先继承,在重构(动作1)
Person.__init__(self,name,age) #父类调用子类元素(动作2)self.strength = tering #继承父类后可调用自己的成员元素(动作3)
deftalk(self):
Person.tslk(self) #调用父类方法(动作4)print("person is talking...2")defwalk(self):print("is walking....")
b= BlackPerson("Kevin","22")classWhitePerson(Person):pass
------------------------------------------------------------------------------------------------------------------------
类的继承(二)
实战案例
class SchoolMember(object): #基类
'''学校成员基类'''member= 0 #注册成员数
def __init__(self,name,age,sex): #基类构造函数
self.name =name
self.age=age
self.sex=sex
self.enroll()#注册方法,直接调用给子类
def enroll(self): #注册成员,每多出一个对象就+1
'''注册'''
print("just enrolled a new school member [%s]"%self.name)
SchoolMember.member+= 1
def tell(self): #问题2.在不改写子类的情况下,通过基类打印,不同子类的信息。
"""循环打印人员信息"""
print("-------info:%s---------"%self.name)for k,v in self.__dict__.items():print("\t",k,v)def __del__(self): #问题1,删除成员后自动减注册表。
'''析构函数,开除一个人后注册表-1'''
print("开除了[%s]..."%self.name)
SchoolMember.member-=1 #每有一个对象删除就减1
class Teacher(SchoolMember): #子类
'''讲师类'''
def __init__(self,name,age,sex,salary,course): #包含基类并新建元素
SchoolMember.__init__(self,name,age,sex) #继承基类构造
self.salary =salary
self.course=coursedef teching(self): #方法
print("Teacher[%s] is teaching [%s]"%(self.name,self.course))class Student(SchoolMember): #子类
"""学生"""
def __init__(self,name,age,sex,course,tuition): #包含基类并新建元素
SchoolMember.__init__(self,name,age,sex) #继承基类构造
self.course =course
self.tuition= tuition #fee学费
defpay_tuition(self,amount):print("student [%s] has just paied [%s]"%(self.name,amount))
self.amount+=amount
t1= Teacher("Wusir","28","F*M","8000","Python")
s1= Student("HaiTao","38","N/A","PYS15",300000)
s2= Student("LiChuang",12,"M","PYS15",11000)print(t1.__dict__) #打印变量t1的元素信息。
#问题2.在不改写子类的情况下,通过基类打印,不同子类的信息。#t1.tell()#s1.tell()#执行结果#-------info:Wusir---------#name Wusir#age 28#sex F*M#salary 8000#course Python#
#-------info:HaiTao---------#name HaiTao#age 38#sex N/A#course PYS15#tuition 300000
#问题1,删除成员后自动减注册表。#import time#del s2#print(SchoolMember.member)#time.sleep(5)#执行结果:#开除了[LiChuang]...#2#开除了[Wusir]...#开除了[HaiTao]...
注:析构函数,程序执行完毕后会自动输出。
类的继承(三)
继承写法
SchoolMember.__init__(self,name,age,sex) #经典类
super(Teacher, self).__init__(name,age,sex) #新式类
多继承
class School(object): #多继承类
'''学校类'''
definfo(self,addr):print("%s 6666666666666666"%addr)class Teacher(SchoolMember,School): #多继承
'''讲师类'''
def __init__(self,name,age,sex,salary,course): #包含基类并新建元素
SchoolMember.__init__(self,name,age,sex) #继承基类构造
#执行结果
#BJ 6666666666666666
School在 元素作为多继承。
本文详细介绍了Python中类的继承机制,包括基本概念、继承方式(实现继承与接口继承)、继承示例及实战案例,帮助读者理解如何在Python中有效利用继承特性。
1109

被折叠的 条评论
为什么被折叠?



