【发布时间】:2018-03-26 23:19:00
【问题描述】:
我对 python OOP 还很陌生,所以我有些困惑。
目前我有:
parser = argparse.ArgumentParser(description='script 1.0')
parser.add_argument('-a', '--foo', help='specify foo')
parser.add_argument('-b', '--bar', type=int, help='specify bar')
parser.add_argument('-c', '--baz', help='specify baz')
parser.add_argument('-d', '--bar2', help='bar2')
args = parser.parse_args()
foo = args.foo
bar = args.bar
baz = args.baz
bar2 = args.bar2
效果很好,但我想为我的整个脚本创建一个类,并将 argparse 作为一个类的方法(有可能吗?)。
所以我尝试了:
import argparse
....
Class Program:
def __init__(self, foo, bar, baz, bar2):
self.foo = foo
self.bar = bar
...(so on for each arg)
def main():
parser = argparse.ArgumentParser(description='script 1.0')
parser.add_argument('-a', '--foo', help='specify foo')
parser.add_argument('-b', '--bar', type=int, help='specify bar')
parser.add_argument('-c', '--baz', help='specify baz')
parser.add_argument('-d', '--bar2', help='bar2')
args = parser.parse_args()
foo = self.foo
bar = self.bar
baz = self.baz
bar2 = self.bar2
不过,我认为我做得不对。我没有找到太多关于它的信息,但是关于 SO 的一篇帖子并没有向我澄清情况,所以我想对我的具体情况发表意见
【问题讨论】:
-
您似乎走在了正确的轨道上,您实际上面临什么问题?
-
@ZdaR,argparse 选项没有被记住以供进一步使用,我大约,我不应该像这样初始化类:__init__(self, --foo, --bar, --baz, --bar2)
-
我认为最好有明确的关注点分离。换句话说,将 CLI 输入与业务逻辑(程序类)分开。为此,我只会在您的脚本直接执行时使用 argparse。换句话说,在
if __name__ == __main__部分下。然后一旦 argparse 完成它的工作,创建一个类实例,将解析的参数传递给它,并运行你的逻辑。 -
编写好的 OOP 并不意味着所有东西都需要在一个类中。让你的班级做一件事情也很重要。正如单一职责原则所述。
标签: python class parameter-passing argparse