Python面向对象编程:继承与组合机制详解及代码示例
本文深入解析Python中的面向对象核心概念,重点对比继承与组合两种代码复用方式。详细阐述Python3中所有类默认继承object的新式类特性,并通过Teacher与Student类的具体代码示例,展示如何利用继承减少重复代码。同时介绍组合在对象属性管理中的应用,以及使用abc模块定义抽象基类以强制子类实现特定接口的规范做法。
本文通过具体实例解析Python面向对象编程中的类继承与组合机制,旨在帮助读者深入理解并掌握相关技术,供学习参考。
在Python 3环境中,所有类默认继承自object基类。凡继承object的类及其子类均被定义为新式类;而在Python 3中,所有类本质上都是新式类。若类未显式集成object(主要见于Python 2),则称为经典类及其子类。
继承是创建新类的一种重要方式,其核心优势在于能够有效减少代码重复,提高代码复用率。
class People:
def __init__(self,name,age):
self.name=name
self.age=age
def walking(self):
print('%s is walking ' %self.name)
def talking(self):
print('%s is talking '%self.name)
class Teacher(People):
pass
class Student(People):
pass
t1=Teacher('egon',18)
print(t1.name,t1.age)
t1.walking()
t1.talking()
s1=Student('xiaobai',22)
print(s1.name,s1.age)
s1.talking()
s1.walking()
以下为代码执行后的输出结果展示。
egon 18 egon is walking egon is talking xiaobai 22 xiaobai is talking xiaobai is walking
class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def walking(self):
print('%s is walking ' %self.name)
def talking(self):
print('%s is talking '%self.name)
class Teacher(People):
def __init__(self,name,age,sex,level,salary):
People.__init__(name,age,sex)
self.level=level
self.salary=salary
def teaching(self):
People.talking(self)
print('%s is teaching'%self.name)
class Student(People):
def __init__(self,name,age,sex,group):
People.__init__(name,age,sex)
self.group=group
def studying(self):
People.talking(self)
print('%s is studying'%self.name)
组合(Composition)是另一种对象关系建立方式。
class Date:
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day
def tell_birth(self):
print('出生于<%s>年 <%s>月 <%s>日'%(self.year,self.mon,self.day))
class Teacher:
def __init__(self,name,age,sex,year,month,day):
self.name=name
self.age=age
self.sex=sex
self.birth=Date(year,month,day)
def teaching(self):
print('%s is teaching'%self.name)
class Student:
def __init__(self,name,age,sex,year,mon,day):
self.name=name
self.age=age
self.sex=sex
self.birth=Date(year,mon,day)
def studying(self):
print('%s is studying'%self.name)
xiaobai=Student('xiaobai',22,'male','1995','3','16')
xiaobai.birth.tell_birth()
以下是组合模式下的代码执行结果。
出生于<1995>年 <3>月 <16>日
继承与组合的对比与应用场景。
class People:
def __init__(self,name,age,sex,year,mon,day):
self.name=name
self.age=age
self.sex=sex
self.birth=Date(year,mon,day)
def walking(self):
print('%s is walking ' %self.name)
def talking(self):
print('%s is talking '%self.name)
class Date:
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day
def tell_birth(self):
print('出生于<%s>年 <%s>月 <%s>日'%(self.year,self.mon,self.day))
class Teacher(People):
def __init__(self,name,age,sex,level,salary,year,mon,day):
People.__init__(self,name,age,sex,year,mon,day)
self.level=level
self.salary=salary
def teaching(self):
People.talking(self)
print('%s is teaching'%self.name)
class Student(People):
def __init__(self,name,age,sex,year,mon,day,group):
People.__init__(self,name,age,sex,year,mon,day)
self.group=group
def studying(self):
People.talking(self)
print('%s is studying'%self.name)
在使用继承时,父类往往需要对子类施加一定的限制或规范。
1、子类必须包含父类中定义的方法。
2、子类实现的方法名称必须与父类方法名保持一致。
import abc
class File(metaclass=abc.ABCMeta):
@abc.abstractclassmethod
def read(self):
pass
@abc.abstractclassmethod
def write(self):
pass
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述的关于Python程序设计的知识对大家有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









