所谓组合,就是把类的实例化放到新类里面,那就把旧类组合起来了,没有直线关系的几个类放在一起,不用去继承了。
在一个类中以另外一个类的对象作为数据属性,称为类的组合。
定义一个类,叫水池,有乌龟和鱼
class Trutle:
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 = Trutle(x)
self.fish = Fish(y)
def print_num(self):
print('水池里共有乌龟%d只,小鱼%d只'%(self.turtle.num,self.fish.num))
执行输出:
弹幕笔记:
- Pool.__init __里构造了Turtle和Fish的对象并分别赋给变量self.turtle和self.fish,同时用x,y给两个对象内各自的num成员赋初值
- .num的意思是实例对象的实例对象
组合与继承?
课后题
- 在一个类中定义一个变量,用于跟踪该类有多少个实例被创建(当实例化一个对象,变量+1,当销毁一个对象,变量-1)
class Check:
count = 0
def __init__(self):
Check.count+=1
def __del__(self):
Check.count-=1
- 定义一个栈(stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构。
isEmpty() 判断当前栈是否为空(返回True 或 False)
push() 往栈的顶部压入一个数据项
pop() 出栈
top() 栈顶
bottom( ) 栈底
##定义一个栈(stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构。
class Stack:
def __init__(self,start=[]):
self.stack=[]
for x in start:
self.push(x)
def isEmpty(self):
return not self.stack
def push(self,obj):
self.stack.append(obj)
def pop(self):
if not self.stack:
print('warning:stack is empty')
else:
return self.stack.pop()
def top(self):
if not self.stack:
print('warning:stack is empty')
else:
return self.stack[-1]
def buttom(self):
if not self.stack:
print('warning:stack is empty')
else:
return self.stack[0]