如何在python类中使用参数或构造函数值

798qvoo8  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(147)

我有一个python类和一个main函数,所以我可以从命令行执行它。我的init函数处理我提供的参数:

import argparse

class Tester:

    def __init__(self):
        self.args_parser = argparse.ArgumentParser(description='Test')
        self.args = self.__parse_parameters()
...

if __name__ == "__main__":
    tester = Tester()

这样,当我从命令行执行上述文件时,例如:

#python teser.py --test eating --lowcarb

我可以提供参数,它们最终会被传递给__parse_parameters函数。
我的问题是,如果我决定从python代码中使用这个类,我如何将这些参数传递给类呢?

tf7tbtn2

tf7tbtn21#

你是说这个吗?

import argparse

class Tester:

    def __init__(self, answer, foo):
        print(answer)
        self.args_parser = argparse.ArgumentParser(description='Test')
        self.args = self.__parse_parameters()

if __name__ == "__main__":
    tester = Tester(answer=42, foo='bar')

另一种选择(取决于您的意思)是将ArgumentParser移出类:

import argparse

class Tester:

    def __init__(self, args):
        self.args = args

if __name__ == "__main__":
    args_parser = argparse.ArgumentParser(description='Test')
    tester = Tester(args_parser.parse_args())

这样就可以传递任何参数:

tester2 = Tester(('arg0', 'arg1'))
jhdbpxl9

jhdbpxl92#

请看official tutorial中的示例:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print(f"the square of {args.square} equals {answer}")
elif args.verbosity == 1:
    print(f"{args.square}^2 == {answer}")
else:
    print(answer)

您可以使用add_argument专门指示参数,然后使用args.<argument-name>将其传递给类。
就我个人而言,我会在main中解析函数中的参数,并将参数传递给类,所以它看起来像这样:

if __name__ == '__main__':
    args = parse_args()
    tester = Tester(args.arg1, args.arg2, ...)

相关问题