现在,旨在运行所有内容的主文件杂乱无章地摆放了许多变量(在顶层控制流中默认为全局变量),几个结构和一个中等大小的主循环。从其他语言中,我了解到全局变量是邪恶的。我倾向于将所有内容放入同一个文件的类中,并从全局控制流中仅调用一种方法,如下所示:
def MyClass:
def __init__(self):
self.value1 = 1
....
if __name__ == "__main__":
#inspect sys.argv here
MyClass().main_proc()
您会认为这是一种设计优势吗?有pythonic的方法可以做到这一点吗?
最佳答案
Python不会强制您像这样使用OOP Java或C#,因此如果没有真正的好处,则无需将内容放入类中。
特别是创建仅用于对内容进行分组的类实例并不是进行IMHO的最佳方法。您可以将这些内容提取到模块中。这不需要任何实例,只需要导入即可。这样,它也位于单独的文件和 namespace 中。
示例:main.py
:
if __name__ == "__main__":
import sys
args = sys.argv[1:]
if len(args) != 2:
print("This script requires exactly two command-line arguments!")
exit(1)
import my_module
exit_code = my_module.run(args) or 0
exit(exit_code)
else:
raise ImportError("Run this file directly, don't import it!")
my_module.py
:# initialization code to be run at import time goes here
def run(args):
# do whatever you need to do
print("Hello world!")
print("You said <", args[0], "> and <", args[1], ">."
# you may return an integer (1-255) as exit code if an error occurred,
# else the default exit code is 0 (successful; no error)
但是,不会将这种方法视为终极真理! 这是我个人的(不是这样)拙劣的见解,但是在某些情况下,总有一种方法更合适,而另一些方法则更受欢迎。
同样,这主要是一个设计问题,对程序的稳定性或功能没有真正的影响。它可能只会提高可读性,但是特别是对于小型脚本而言,这不是一个好方法,因为它添加了很多代码,它们实际上并没有执行任何操作。我会说,只有在您的大型项目带有多个模块的情况下,它才有用。
对于相当小的脚本(单个文件或只有很少的模块),我建议仅在顶部定义所需的所有类和函数,然后使用标准
if __name__ == "__main__"
作为入口点。关于python - 在python中设计程序入口点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36794098/