将参数传递给 Class:在定义期间或在 python3 的构造函数中解包?
Passing arguments into the Class: unpacking during definition or in the constructor in python3?
我是 OOP 的新手,正在编写 main.py。通过传递许多不同的参数从 CLI 调用。
请帮我使用更好的解决方案来解压值?
解决方案 #1:在 class 定义期间解压参数或解决方案 #2:在 init 构造函数中解压参数。
解决方案#1
def unpack_command_line(vars):
if len(vals) == 3:
return dictinary_of_some_values1
elif len(vals) > 4:
return dictinary_of_some_values2
else:
raise ValueError("Some arguments are missing")
def main(argv):
cli_vars = unpack_command_line(argv)
if cli_vars['action'] == 'some_command':
sc = SomeClass(cli_vars['param1'], cli_vars['param'])
sc.domesomething()
if cli_vars['action'] == 'some_command2':
.........
else:
raise ValueError("Wrong arguments")
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
然后我打电话给 class
class SomeCLass():
def __init__(self, param1, param2, param3):
self.param1 = param1
self.param2 = param2
解决方案#2
def unpack_command_line(vars):
if len(vals) == 3:
return dictinary_of_some_values1
elif len(vals) > 4:
return dictinary_of_some_values2
else:
raise ValueError("Some arguments are missing")
def main(argv):
cli_vars = unpack_command_line(argv)
if cli_vars['action'] == 'some_command':
sc = SomeClass(cli_vars) # Here is the difference 1
sc.domesomething()
if cli_vars['action'] == 'some_command2':
.......
else:
raise ValueError("Wrong arguments")
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
然后我打电话给 class
class SomeCLass():
def __init__(self, dict_cli_vars): # Here is the difference 2
self.param1 = dict_cli_vars['param1'] # Here is the difference 3
self.param2 = dict_cli_vars['param2']
稍后 即 在构造函数中解包是更好的方法。您可以解压缩 cli_vars
词典的内容。
sc = SomeClass(**cli_vars)
class SomeCLass():
def __init__(self, **kwargs): # Here is the difference 2
for key, val in kwargs.items():
setattr(self, key, val)
我是 OOP 的新手,正在编写 main.py。通过传递许多不同的参数从 CLI 调用。
请帮我使用更好的解决方案来解压值?
解决方案 #1:在 class 定义期间解压参数或解决方案 #2:在 init 构造函数中解压参数。
解决方案#1
def unpack_command_line(vars):
if len(vals) == 3:
return dictinary_of_some_values1
elif len(vals) > 4:
return dictinary_of_some_values2
else:
raise ValueError("Some arguments are missing")
def main(argv):
cli_vars = unpack_command_line(argv)
if cli_vars['action'] == 'some_command':
sc = SomeClass(cli_vars['param1'], cli_vars['param'])
sc.domesomething()
if cli_vars['action'] == 'some_command2':
.........
else:
raise ValueError("Wrong arguments")
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
然后我打电话给 class
class SomeCLass():
def __init__(self, param1, param2, param3):
self.param1 = param1
self.param2 = param2
解决方案#2
def unpack_command_line(vars):
if len(vals) == 3:
return dictinary_of_some_values1
elif len(vals) > 4:
return dictinary_of_some_values2
else:
raise ValueError("Some arguments are missing")
def main(argv):
cli_vars = unpack_command_line(argv)
if cli_vars['action'] == 'some_command':
sc = SomeClass(cli_vars) # Here is the difference 1
sc.domesomething()
if cli_vars['action'] == 'some_command2':
.......
else:
raise ValueError("Wrong arguments")
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
然后我打电话给 class
class SomeCLass():
def __init__(self, dict_cli_vars): # Here is the difference 2
self.param1 = dict_cli_vars['param1'] # Here is the difference 3
self.param2 = dict_cli_vars['param2']
稍后 即 在构造函数中解包是更好的方法。您可以解压缩 cli_vars
词典的内容。
sc = SomeClass(**cli_vars)
class SomeCLass():
def __init__(self, **kwargs): # Here is the difference 2
for key, val in kwargs.items():
setattr(self, key, val)