设为首页 加入收藏

TOP

Python面向对象:杂七杂八的知识点(三)
2019-01-16 14:08:44 】 浏览:380
Tags:Python 面向 对象 杂七杂八 知识点
口时,想要让它未来既可以使用普通的cache,也可以使用redis缓存。那么只需要定义一个抽象的类Cache,里面实现两个抽象方法get()和set(),以后无论使用普通的cache还是redis缓存,都只需让这两种缓存类型实现且必须实现get()和set()即可。

import abc

class Cache(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def get(self, key):
        pass

    @abc.abstractmethod
    def get(self, key, value):
        pass

# 子类继承时,必须实现这两个方法
class CacheBase(Cache):
    def get(self, key):
        pass
    def set(self, key, value):
        pass

class Redis(Cache):
    def get(self, key):
        pass
    def set(self, key, value):
        pass

如果子类没有实现或者少实现了抽象类中的方法,在构造子类实例化对象的时候就会立即报错。

在Python中大多数时候不建议直接定义抽象类,这可能会造成过度封装/过度抽象的问题。如果想要让子类必须实现父类的某个方法,可以在父类方法中加上raise来抛出异常NotImplementedError,这时如果子类对象没有实现该方法,就会查找到父类的这个方法,从而抛出异常。

class Cache():
    def get(self, key):
        raise NotImplementedError("must define get method")
    def set(self, key):
        raise NotImplementedError("must define set method")

使用raise NotImplementedError的方式来模拟抽象类,它只有在调用到set/get的时候才会抛异常,在实例化对象的时候或者没有调用到这两个方法的时候不会报错。

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python爬虫入门教程 25-100 知乎.. 下一篇我的Python分析成长之路8

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目