我有一个泛型类 (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/