1.抽象类
即该类不能被实例化对象,该类只是定义了一些接口,用于扩展。
2.定义抽象类
import abc
class Base(metaclass=abc.ABCMeta):
@abc.abstractmethod
def fun1(self):
pass
@abc.abstractmethod
def fun2(self):
pass
3.使用抽象类扩展具体类
1.注册具体类
import abc
from abc_base import Base
@Base.register
class RegisterImpl():
pass
print(issubclass(RegisterImpl,Base))
print(isinstance(RegisterImpl(),Base))
2.派生具体类
class BaseImpl(Base):
def fun1(self):
print(":)")
def fun2(self):
print("^_^")
for sc in Base.__subclass__():
print(sc.__name__)
4.辅助基类
import abc
class Base(abc.ABC):
'''
通过继承abc.ABC 实现抽象类
'''
@abc.abstractmethod
def fun01(self):
pass
@abc.abstractmethod
def fun02(self):
pass
5.抽象类中的具体方法
import abc
class Base(abc.ABC):
@abc.abstractmethod
def fun01(self):
print(":)")
class SubBase(Base):
def fun01(self):
super(SubBase,self).fun01()
print("^_^")
6.属性的抽象
import abc
class Base(abc.ABC):
@property
@abc.abstractmethod
def value(self)
pass
@value.setter
@abc.abstractmethod
def value(self,new_value):
pass
class SubBase(Base):
@property
def value(self):
return "Read-value"
class SubBase01(Base):
_value = "Default value"
@property
def value(self):
return self._value
@value.setter
def value(self,new_value):
self._value = new_value
7.抽象类与类方法静态方法
class Base(abc.ABC):
@classmethod
@abc.abstractmethod
def factory(cls,*args):
return cls()
@staticmethod
@abc.abstractmethod
def const_behavior():
return "Should never reach here"
class BaseImpl(Base):
def do_something(self):
pass
@classmethod
def factory(cls,*args):
obj = cls(*args)
obj.do_something
return obj
@staticmethod
def const_behavior():
return "Static behavior differ"
'''
类方法和静态方法 都是在类上 调用,但是如果未实现 抽象 类方法 或静态方法 ,则还是 无法实例化 对象.
'''