python 使用abc实现接口类/虚类(2.2)
Posted jwang106
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 使用abc实现接口类/虚类(2.2)相关的知识,希望对你有一定的参考价值。
python 使用abc实现接口类/虚类
具体类
class BaseA:
def run(self):
print(‘base A running‘)
class ChildA(BaseA):
def run(self):
print(‘child a‘)
# 具体类可以直接继承也可以实现多态
a = BaseA()
a.run()
a = ChildA()
a.run()
虚类
class BaseB():
@abc.abstractmethod
def run(self):
return NotImplemented
def hello(self):
print(‘hello‘)
# 直接实例化不会会报错
b = BaseB() # 这里没有正确的实现虚类,正确实现看馅饼
b.run()
output: return NotImplemented
纯虚类 也就是接口类
# python2 不是继承ABC,使用 __metaclass__ = ABCMeta
class BaseE(abc.ABC):
@abc.abstractmethod
def run(self):
return NotImplemented
@abc.abstractmethod
def hello(self):
return print(‘hello‘)
class ChildE1(BaseE):
pass
class ChildE2(BaseE):
@abc.abstractmethod
def run(self):
print(‘e‘)
class ChildE3(BaseE):
def run(self):
print(‘e‘)
# e = BaseE() 报错
# e = ChildE2() 报错
e = ChildE3()
e.hello()
e.run()
继承虚类后想要改变参数类型怎么办
# 给新的参数一个默认值, 可以满足新的参数的调用
# 这样可以满足原来的参数对函数的调用,不必改变后续代码
class ChildE4(BaseE):
def run(self, new_arg =1):
print(new_arg)
可不可以实现 同一个函数不同的参数列表
class Test():
def run(self):
print(‘1‘)
def run(self, temp):
print(temp)
t = Test()
# t.run() 报错了
t.run(1)
# 所以python并没有c++里那样的virtual table去根据参数数量,去判断和使用不同的函数
以上是关于python 使用abc实现接口类/虚类(2.2)的主要内容,如果未能解决你的问题,请参考以下文章