面向对象组合用法

面向对象的组合用法

一个类中以另一个类的对象作为数据属性(一个类中引用另一个类的对象)
一种 "有" 的关系:
比如:定义 1个人类 & 1个武器类 然后 张三 有 枪 李四 有 刀

from math import pi
 
class Circle:
'''
定义了一个圆形类;
提供计算面积(area)和周长(perimeter)的方法
'''
def __init__(self,radius):
self.radius = radius
 
def area(self):
return pi * self.radius * self.radius
 
def perimeter(self):
return 2 * pi *self.radius
 
 
circle = Circle(10)             #实例化一个圆
area1 = circle.area()         #计算圆面积
per1 = circle.perimeter()     #计算圆周长
print(area1,per1)             #打印圆面积和周长
<br><br>############################<br><br>
class Ring:
'''
定义了一个圆环类
提供圆环的面积和周长的方法
'''
def __init__(self,radius_outside,radius_inside):
self.outsid_circle = Circle(radius_outside)         #*****直接在一个类中生成另一个类的对象(也可以参数直接传入一个类的对象)
self.inside_circle = Circle(radius_inside)
 
def area(self):
return self.outsid_circle.area() - self.inside_circle.area()
 
def perimeter(self):
return self.outsid_circle.perimeter() + self.inside_circle.perimeter()
 
 
ring = Ring(10,5)                 #实例化一个环形
print(ring.perimeter())         #计算环形的周长
print(ring.area())                 #计算环形的面积

===========================

class BirthDate:
def __init__(self,year,month,day):
self.year=year
self.month=month
self.day=day
 
class Couse:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
 
class Teacher:
def __init__(self,name,gender,birth,course):
self.name=name
self.gender=gender
self.birth=birth
self.course=course
def teach(self):
print('teaching')
 
p1=Teacher('','male',
BirthDate('1995','1','27'),             #传进去的是对象
Couse('python','28000','8 months')
)
 
print(p1.birth.year,p1.birth.month,p1.birth.day)
 
print(p1.course.name,p1.course.price,p1.course.period)
原文地址:https://www.cnblogs.com/jin-yuana/p/10025086.html