用python写接口所学到的点

半腔热情 提交于 2019-12-23 20:56:29

一、抽象类

用抽象类定义基类,抽象类中定义相应的接口方法,子类继承实现。 注意:抽象类不可被实例化

使用abc模块下的ABCMeta定义一个抽象类。

abstractmethod来定义一个抽象方法,其抽象方法必须在子类中实现。如果在非抽象类好像可以用 raise NotImplementedError

from abc import ABCMeta, abstractmethod

class BaseClass(metaclass=ABCMeta):
    def __init__(self, msg):
        print("create baseclass!")
        print(msg)
        print('----------')

    @abstractmethod
    def fn(self):
        print('implement')

然后使用继承的方法来具体化,还有一种是注册,我不太熟悉

class ChildClass(BaseClass):
    def __init__(self, msg):
        super().__init__(msg)

    def fn(self):
        super().fn()
        print('OK')


test = ChildClass('hello')
test.fn()

运行结果:

assert断言  -  判断输入文件路径是否存在,不存在则停止运行。img为文件路径,“”里面为打印的文字警告。

assert os.path.exists(img), "Warning: The file path dose not exist!"

二、配置文件

为了把相关配置写进配置文件,配置文件采用json文件。python中json模块可以直接load.

@classmethod
    def load(cls, cfg_fp):
        with open(cfg_fp) as file:
            cfg = json.load(file)
        cfg = cls(**cfg['nn_params'])
        return cfg

classmethod是表示类方法,在类没有实例化时可以直接调用该方法。在上面代码中用load读取了配置文件,然后用文件内的参数,实例化了一个对象。并把获得的对象返回。

发现一个问题,当父类中的方法为抽象方法时,在其子类中必须将其实现。但不一定必须要在子类方法中用super调用父类中相应的方法,只需要方法名字和参数一致即是实现。

查阅资源链接:

NotImplementedError   https://blog.csdn.net/grey_csdn/article/details/77074707

抽象类   https://www.cnblogs.com/weihengblog/p/8528967.html

元类,讲的很好但是没用到: https://cloud.tencent.com/developer/article/1115789

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!