类的组合
当类与类之间没有直接逻辑关系,但是需要将他们联合起来,就可以用组合。
在一个类中以另外一个类的对象作为数据属性,称为类的组合。
比如,鱼和乌龟没有关系,但是都在水池里面。水池就是乌龟和鱼的组合。
组合用于“有一个”的场景中,继承用于“是一个”的场景中。
class Turtle:
def __init__(self,x):
self.num = x
class Fish:
def __init__(self,x):
self.num = x
class Pool:
def __init__(self,x,y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print("水池里总共有乌龟%d只,小鱼%d条." % (self.turtle.num,self.fish.num))
>>> pool = Pool(1,10)
>>> pool.print_num()
水池里总共有乌龟1只,小鱼10条.
>>>
组合的应用例子:
圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用。
from math import pi
class Circle:
def __init__(self,radius):
self.radius = radius
def area(self):
return pi*self.radius*self.radius
def perimeter(self):
return 2*pi*self.radius
class Ring:
def __init__(self,radius_outside,radius_inside):
self.outside_circle = Circle(radius_outside)
self.inside_circle = Circle(radius_inside)
def area(self):
return self.outside_circle.area() - self.inside_circle.area()
def perimeter(self):
return self.outside_circle.perimeter() + self.inside_circle.perimeter()
>>> ring = Ring(10,