python-abc模块(抽象类)

1.抽象类
即该类不能被实例化对象,该类只是定义了一些接口,用于扩展。
2.定义抽象类
import abc
# 定义抽象类 设置metaclass = abc.ABCMeta
class Base(metaclass=abc.ABCMeta):

	# 使用abc.abstractmethod 装饰器定义抽象方法
	@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)) #True
print(isinstance(RegisterImpl(),Base)) #True
#这样的注册 并不是实际上的 继承,只是说明 注册后该类为 抽象类的虚拟子类,并不会继承,因此不用重写抽象类的重写方法
2.派生具体类
class BaseImpl(Base):
	# 通过派生具体类,必须 实现所有的抽象方法 否则不能被实例
	def fun1(self):
		print(":)")
	def fun2(self):
		print("^_^")
for sc in Base.__subclass__():
	print(sc.__name__)
# 这里并不能打印 RegisterImpl 由此说明 register 并不是真正意义上的继承
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"
'''
	类方法和静态方法 都是在类上 调用,但是如果未实现 抽象 类方法 或静态方法 ,则还是 无法实例化 对象.
'''
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值