当前位置: 首页 > 图灵资讯 > 行业资讯> Python面向对象编程之组合关系

Python面向对象编程之组合关系

发布时间:2025-10-27 16:11:31

面向对象编程的python组合

我们谈到了面向类和对象的继承,知道继承是什么“是”。然而,类和类之间还有另一种关系,即组合。

先看两个例子:

先定义两个类别,一个老师类别,有名字、年龄、出生年份、月份、日期、课程等特点,以及走路和教学技能。

classTeacher:
def__init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.year=year
self.mon=mon
self.day=day
defwalk(self):
print("%siswalkingslowly"%self.name)
defteach(self):
print("%sisteaching"%self.name)

再定义一个学生类,学生类有名字、年龄、出生年份、月份和日期、学习组名等特点,以及走路和学习技能。

classStudent:
def__init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.year=year
self.mon=mon
self.day=day
defwalk(self):
print("%siswalkingslowly"%self.name)
defstudy(self):
print("%sisstudying"%self.name)

根据类继承的特点,可以减少代码。

定义人类,然后让教师和学生继承人类的特征和技能:

classPeople:
def__init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.year=year
self.mon=mon
self.day=day
defwalk(self):
print("%siswalking"%self.name)
classTeacher(People):
def__init__(self,name,age,year,mon,day,course):
People.__init__(self,name,age,year,mon,day)
self.course=course
defteach(self):
print("%sisteaching"%self.name)
classStudent(People):
def__init__(self,name,age,year,mon,day,group):
People.__init__(self,name,age,year,mon,day)
self.group=group
defstudy(self):
print("%sisstudying"%self.name)

然后以老师和学生为例,得到一个老师和一个学生。

t1=Teacher("alex",28,1989,9,2,"python")
s1=Student("jack",22,1995,2,8,"group2")

现在很容易知道T1和S1的名字、年龄、出生年份、月份和日期,但一次打印T1或S1的生日并不容易。此时,您需要使用字符串进行拼接。有什么更好的方法吗??

相关推荐:Python视频教程

那就是组合。

继承是一种子类是一种父亲的关系,而组合是一种类有另一种类的关系。可以说每个人都有生日,而不是生日,所以有必要使用组合的功能 。你可以将出生日期和日期定义为另一个日期类别,然后将教师或学生与这个日期类别结合起来,你可以很容易地得到教师T1或学生S1的生日,不再像字符串拼接那么麻烦。

看下面的代码:

classDate:
def__init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day
defbirth_info(self):
print("Thebirthis%s-%s-%s"%(self.year,self.mon,self.day))
classPeople:
def__init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.birth=Date(year,mon,day)
defwalk(self):
print("%siswalking"%self.name)
classTeacher(People):
def__init__(self,name,age,year,mon,day,course):
People.__init__(self,name,age,year,mon,day)
self.course=course
defteach(self):
print("%sisteaching"%self.name)
classStudent(People):
def__init__(self,name,age,year,mon,day,group):
People.__init__(self,name,age,year,mon,day)
self.group=group
defstudy(self):
print("%sisstudying"%self.name)
t1=Teacher("alex",28,1989,9,2,"python")
s1=Student("jack",22,1995,2,8,"group2")

这样,老师T1或学生S1的姓名、年龄等特点以及步行、教学或学习技能都可以用同样的方法来调用。

print(t1.name)
t1.walk()
t1.teach()

输出为:

alex
alexiswalking
alexisteaching

怎样才能知道他们的生日?

print(t1.birth)

输出为:

<__main__.296950000000Dateobjectat00000000>

这个birth是从父类People继承下来的子类Teacher,而父类People的birth是和Date结合起来的,所以这个birth是一个对象。Date下面有一个birth_info技能,可以通过调用date下面的birth_info功能属性来了解老师t1的生日。

t1.birth.birth_info()

结果如下:

thebirthis1989-9-2

同样,学生S1的生日也用同样的方法知道实例:

s1.birth.birth_info()

结果如下:

thebirthis1995-2-8

组合是在一个类中使用另一个类,从而将几个类组合在一起。组合的功能也是减少重复代码。

相关推荐:

Python之初认识对象的继承

相关文章

Python面向对象编程之组合关系

Python面向对象编程之组合关系

2025-10-27
Python查看模块(变量、函数、类)方法

Python查看模块(变量、函数、类)方法

2025-10-27
Python内置函数一览表

Python内置函数一览表

2025-10-27
python self用法详解

python self用法详解

2025-10-26
Python之math模块常用方法汇总

Python之math模块常用方法汇总

2025-10-26
Python之json模块和pickle模块详解

Python之json模块和pickle模块详解

2025-10-26