相当于Java的接口,
Java的类实现特性时,是要实现接口
Python鸭子类型:
Python去实现一个类的特性时,是不需要继承父类的,去看一个类有什么特性,只要看内部的魔法函数实现
我们希望某些子类必须实现某些方法
这份时候就可以用抽象基类
判断某个对象的类型
import abc
class cache(metaclass=abc.ABCMeta):
@abc.abstractmethod
def get(self,key):
pass
@abc.abstractmethod
def set(self,key,value):
pass
class Redis_cache(cache):
# def get(self,key):
# pass
# def set(self,key,value):
# pass
pass
redie = Redis_cache()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-2a1ab74f1e18> in <module>()
18 pass
19
---> 20 redie = Redis_cache()
TypeError: Can't instantiate abstract class Redis_cache with abstract methods get, set
class Redis_cache2(cache):
def get(self,key):
pass
def set(self,key,value):
print("success")
redis2 = Redis_cache2()
redis2.set(1,2)
success
此时的Redis_cache没有实现抽象类的get,set方法,所以报错,提示要去实现
此时的Redis_cache2实现了抽象类的get,set方法,所以能够正常运行
from collections.abc import Sized
isinstance(redis2,Sized)
False
网友评论