python类的组合
python之类的组合
1. 什么是组合
组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象
class Foo:
xxx=111
pass
class Bar:
yyy=222
pass
obj=Foo()
obj.attr=Bar()
obj.xxx
obj.attr.yyy
2. 为何要用组合
通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起
从而减少类与类之间代码冗余(目的)
class Foo1:
pass
class Bar:
pass
obj_from_bar=Bar()
obj1=Foo1()
obj1.attr1=obj_from_bar(在obj1中增加了一个属性,名字为attr1,值为obj_from_bar(类Bar的对象))
3. 如何用组合
class OldboyPeople:
school = 'Oldboy'
def __init__(self,name,age,sex,):
self.name = name
self.age = age
self.sex = sex
class OldboyStudent(OldboyPeople):
def __init__(self, name, age, sex,score=0):
OldboyPeople.__init__(self,name,age,sex)
self.score = score
def choose_course(self):
print('%s choosing course' % self.name)
class OldboyTeacher(OldboyPeople):
def __init__(self,name,age,sex,level):
OldboyPeople.__init__(self,name,age,sex)
self.level=level
def score(self,stu,num):
stu.score=num
class Course:
def __init__(self,c_name,c_price,c_period):
self.c_name = c_name
self.c_price = c_price
self.c_period = c_period
def tell_info(self):
print('<课程名:%s 价钱:%s 周期:%s>' %(self.c_name,self.c_price,self.c_period))
# 创建课程对象
python=Course('python',1900,'5mons')
java=Course('JAVA',1900,'4mons')
stu1=OldboyStudent('刘二蛋',38,'male')
stu1.course=python #这就是两个类的组合(在stu1这个对象里,加了一个属性,名字为course,值是另一个对象,这样就可以使用另一个对象里的属了)
# print(stu1.__dict__)
stu1.course.tell_info()
tea1=OldboyTeacher('egon',18,'male',10)
tea1.course=python
# print(tea1.__dict__)
tea1.course.tell_info()
'''