1、把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定。简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景中。例如,水池里有一个乌龟,天上有一个鸟,地上有一个小甲鱼,这些适合使用组合。青瓜是瓜,女人是人,鲨鱼是鱼,这些就应该使用继承啦实例如下:

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()

 

python组合和继承 python类的继承与组合_Stack

 

2、类、类对象和实例对象

当你这个类定义完的时候,类定义就变成类对象,可以直接通过“类名.属性”或者“类名.方法名()”引用或使用相关的属性或方法。

3、对于类的应用,我们一般不要试图定义出类的所有特性和方法,应该利用继承和组合的机制来进行扩展,另外,我们还可以利用不同的词性来进行命名,对于属性一般是用名词,对于方法名一般用动词。

4、绑定

Python严格要求方法需要有实例才可以被调用,这种限制其实就是python所谓的绑定。

 

python组合和继承 python类的继承与组合_python_02

 

5、在一个类中定义一个变量,用于跟踪该类有多少个实例被创建(当实例化一个对象,这个变量+1,当销毁一个对象,这个变量自动-1):

实现代码如下:

class C:
        count = 0
 def __init__(self):
            C.count += 1
        def __del__(self):
                C.count -= 1

6、定义一个栈(Stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构。至少需要有以下方法:

方法名

含义

isEmpty()

判断当前栈是否为空(返回 True 或 False)

push()

往栈的顶部压入一个数据项

pop()

从栈顶弹出一个数据项(并在栈中删除)

top()

显示当前栈顶的一个数据项

bottom()

显示当前栈底的一个数据项

实现代码如下:

class Stack:
    def __init__(self):
        self.stack = []
    def Isempty(self):
       if len(self.stack) == 0:
          self.Isempty1=True
          print(self.Isempty1)
       else:
           self.Isempty1 = False
           print(self.Isempty1)
    def push(self,x):
        self.stack.append(x)
    def pop(self,y):
        if len(self.stack) == 0:
            print("我为空的,不能够弹出")
        else:
            self.stack.pop(y)
    def top(self):
        if len(self.stack) == 0:
             print("我为空的,不能够弹出")
        else:
            print(self.stack[len(self.stack)-1])
    def bottom(self):
        if len(self.stack) == 0:
            print("我为空的,不能够弹出")
        else:
            print(self.stack[0])
a = Stack()
a.Isempty()
a.pop(2)
a.push(3)
a.push(4)
a.push(5)
a.top()
a.bottom()

python组合和继承 python类的继承与组合_数据项_03