多态
主要指类的具有多种延伸形态, 和调用时的多种形态
在python中体现为动态类型, 动态语言中关注的是对象的属性和方法, 而不是类型
本质上动态语言不需要多态这个特性, 因为语言本身就是多态的
使用多态实现灵活使用不同子类
class cal:
def func(self, a, b):
print("pass")
pass
class add(cal):
def func(self, a, b):
print(a + b)
return a + b
class minus(cal):
def func(self, a, b):
print(a - b)
return a - b
def test(C:cal, a, b):
C.func(a, b)
l = cal()
a = add()
m = minus()
# C 可以是cal类, 以及其子类add, minus
test(l, 10, 9)
test(a, 8, 7)
test(m, 6, 5)
# pass
# 15
# 1
抽象
抽象类: 抽象出来的类, 不能创建实例对象
抽象方法: 抽象出来的方法, 不能调用, 要求子类必须实现相应方法
本质目的是用于抽象层面的代码设计, 统一规定模式, 不考虑具体实现内容
python中不直接支持抽象, 需要abc
模块, 并且可以设置抽象类的元类为abc.ABCMeta
, 也可以用装饰器修饰抽象方法@abc.abstractmethod
from abc import ABCMeta, abstractmethod
class cal(object, metaclass=ABCMeta):
@abstractmethod
def func(self, a, b):
pass
class add(cal):
def func(self, a, b):
print(a + b)
return a + b
class minus(cal):
def func(self, a, b):
print(a - b)
return a - b
def test(C:cal, a, b):
C.func(a, b)
# l = cal()
a = add()
m = minus()
# C 只能是cal的子类 add, minus
# test(l, 10, 9)
test(a, 8, 7)
test(m, 6, 5)
# 15
# 1