组合与重用性
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
class
Equip:
# 武器装备类
def
fire(
self
):
print
(
'release Fire skill'
)
class
Riven:
# 英雄Riven的类,一个英雄需要有装备,因而需要组合Equip类
camp
=
'Noxus'
def
__init__(
self
, nickname):
self
.nickname
=
nickname
self
.equip
=
Equip()
# 用Equip类产生一个装备,赋值给实例的equip属性
r1
=
Riven(
'锐雯雯'
)
r1.equip.fire()
# 可以使用组合的类产生的对象所特有的方法
组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,
1.继承的方式
通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。
当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人
2.组合的方式
用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3...
示例:继承与组合
class
People:
def
__init__(
self
, name, age, sex):
self
.name
=
name
self
.age
=
age
self
.sex
=
sex
class
Course:
def
__init__(
self
, name, period, price):
self
.name
=
name
self
.period
=
period
self
.pric
=
price
def
tell_info(
self
):
print
(
'<%s %s %s>'
%
(
self
.name,
self
.period,
self
.pric))
class
Teacher(People):
def
__init__(
self
, name, age, sex, job_title):
People.__init__(
self
, name, age, sex)
self
.job_title
=
job_title
self
.course
=
[]
self
.students
=
[]
class
Student(People):
def
__init__(
self
, name, age, sex):
People.__init__(
self
, name, age, sex)
self
.course
=
[]
egon
=
Teacher(
'egon'
,
18
,
'male'
,
'沙河霸道金牌讲师'
)
s1
=
Student(
'牛弹琴'
,
18
,
'female'
)
python
=
Course(
'python'
,
'3mons'
,
3000.0
)
linux
=
Course(
'python'
,
'3mons'
,
3000.0
)
# 为老师egon和学生s1添加课程
egon.course.append(python)
egon.course.append(linux)
s1.course.append(python)
# 为egon老师添加学生
egon.students.append(s1)
for
obj
in
egon.course:
obj.tell_info()
总结:
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好