python - 避免 if __name__ == '__main__' 在 Python 子类中使用来自父类的函数运行

标签 python subclass

我有一个泛型类 (A),它可以像这样被子类化:

class A:
    def run(self):
        ...
        self.do_something()
        ...

    #abstract function
    def do_something(self):
        pass


class B(A):
    def do_something(self):
        ...

子类位于单独的文件中,我通过将此代码添加到每个文件来直接运行(B 是文件中子类的名称):

if __name__ == '__main__':
    B().run()

我的问题是,我是否可以避免将此代码添加到所有包含子类的文件,因为代码中唯一改变的是正在使用的类(示例中的 B)?

最佳答案

如果你的 python 版本足够新,你可以创建一个类装饰器。

在这种情况下,是间接的。

def runifmain(mainname):
    def deco(clas):
        if mainname == '__main__':
            clas().run()
        return clas
    return deco


@runifmain(__name__)
class B(A):
    [...]

如果您在某个地方集中定义 runifmain() 并在需要的地方使用 @runifmain(__name__) 就应该完成这项工作。

关于python - 避免 if __name__ == '__main__' 在 Python 子类中使用来自父类的函数运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386969/

相关文章:

python - 运行OpenCV线条图脚本时遇到错误

C# :base class work when defining the subclass? 怎么办

python - 面对 ValueError : Target is multiclass but average ='binary'

python - 我一直收到缩进错误,我不应该这样

Python/正则表达式 : Get all strings between any two characters

swift - Swift 中的 super.init() 递归问题

iphone - 子类化的 UIView 没有设置标签

c++ - 可以消除这个基类构造函数吗?

java - 避免使用instanceof,但将函数参数限制为父类(super class)的一组子类

python - fit_generator() 在 Spyder 中不起作用