4-2 抽象基类

2018-08-26  本文已影响0人  正在努力ing

相当于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

上一篇 下一篇

猜你喜欢

热点阅读