文章目录
一、前言
python除了可以用继承之外,还支持组合机制,可以让用户将一个或多个类关联在一起,继承一般是包含或者从属关系,而组合一般是类与类之间有显著不同(我把它理解为平等关系),几个彼此不相关联的类组合成一个新的类。
如:定义花、树、猫、人这几个类组合成一个公园,并通过公园的类来对花、树、猫、人的类的属性进行访问。
二、创建类和类的组合
代码如下
class Flowers:
def __init__(self,name,color):
self.name = name
self.color = color
class Tree:
def __init__(self,name):
self.name = name
class Cat:
def __init__(self,name,number):
self.name = name
self.number = number
class People:
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Park:
def __init__(self,flowers_name,flowers_color,tree_name,cat_name,cat_number,people_name,people_sex):
self.flowers = Flowers(flowers_name,flowers_color)
self.tree = Tree(tree_name)
self.cat = Cat(cat_name,cat_number)
self.people = People(people_name,people_sex)
def print_msg(self):
print("公园里有名为%s的花,颜色是%s,有名为%s的树,有%s品种的猫%d只,有人类%s,名字叫做%s"
%(self.flowers.name,self.flowers.color,self.tree.name,self.cat.name,self.cat.number,self.people.name,self.people.sex))
a = Park("樱花","白色","樟树","中华田园猫",2,"男性","Tom")
a.print_msg()
运行:
其实总结就是:把需要的类放进去实例化,就叫“组合”。
我们再看一段关于类组合的代码:
代码如下:
class Flowers:
def __init__(self,name):
self.name = name
class Tree:
def __init__(self,name,color,flowers):
self.name = name
self.flowers = flowers
class Park:
def __init__(self,name,location,tree):
self.name = name
self.location = location
self.tree = tree
f = Flowers("樱花")
t = Tree("樟树","绿色",f)
p = Park("顾村公园","上海市宝山区",t)
print("位于[%s]的[%s]里面的[%s]开了,简直美极了!" %(p.location,p.name,p.tree.flowers.name))
运行:
三、结语
如您在使用过程中有任何问题,请加QQ群进一步交流。
QQ交流群:906015840 (备注:物联网项目交流)。
获取资料:微信扫描下方二维码,关注公众号:一个物联网项目的前世今生。
静晨出品:静之所想,晨之所计