复用命令行调用的类的方法

前两天调用yolov5的一个功能,需要调用一个类,接口不同,导致代码面目全非,现在用一个类举例子简单说明

import argparse

def parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--videodir', default='frame',type=str, help='videos dir ')
    opt=parser.parse_args()
    return opt


class Extract:
    def __init__(self, opt):
        self.message=opt.videodir
    def show(self):
        print(self.message)


if __name__ == '__main__':
    
     #命令行调用
     opt=parse_opt()
     extract=Extract(opt)
     extract.show()

上述是我们最常见的一个功能模块,但是这个模块仅限于单独运行,如果我们想在其他模块调用Extract,需要传入opt,而这是一个argparse对象,传起来很麻烦,考虑到这一点,我们可以将其看作一个类,构造一个中介的类转换

import argparse

def parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--videodir', default='frame',type=str, help='videos dir ')
    opt=parser.parse_args()
    return opt

class helper:
    def __init__(self,videopath):
        self.dir=videopath
    @property
    def videodir(self):
        return self.dir


class Extract:
    def __init__(self, opt):
        self.message=opt.videodir
    def show(self):
        print(self.message)




if __name__ == '__main__':
    opt=helper("frame")
    extract=Extract(opt)
    extract.show()

     #命令行调用
     # opt=parse_opt()
     # extract=Extract(opt)
     # extract.show()

helper类起到一个中介的作用,我们把需要传递的参数放在helper中,把需要返回的属性通过@property标记出来,这样我们就不用大费周折修改Extract类,这样这个类既可以单独测试,又可以作为一个模块引入到其他功能中

你可能感兴趣的:(工具,代码心得,python,linux,开发语言)