我是OOP的新手,正在编写main.py。 通过传递许多不同的参数从CLI调用。

请帮助我使用更好的解决方案来解压值?

解决方案1:在类定义期间解压缩参数;解决方案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 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 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']

#1楼 票数:1 已采纳

稍后, 在构造函数中解压缩是更好的方法。 您可以解压缩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)

  ask by yadayada translate from so

未解决问题?本站智能推荐:

1回复

为什么在Python中调用父方法时必须传递self参数?

我在调用父类的方法时难以理解必须键入self的逻辑: 为什么我必须在以下类型中输入self: container = tk.Frame(self) ?
1回复

python中的类属性可以写在protected中吗?

python中的类属性可以写成protected吗 我们如何限制访问list_nums
1回复

试图将类作为参数传递给其他类的构造函数,但出现“转换”错误

因此,我试图将一个类作为参数传递给另一个类(在不同的标头中),并不断收到我似乎无法调试的错误。 错误: 'wanderingSoul :: wanderingSoul(&wanderingSoul &&)':无法将参数1从'player'转换为'const wander
4回复

在python中声明一个名为“class”的变量

我想这样声明一个变量(在这种情况下为字符串): 在Python (3.6.3)中 ,出现错误: 显然我不喜欢在下class使用等号( = )。 假设我确实需要一个名称为class的变量,而我不能将其更改为myClass或其他任何东西,这样做的正确方法是什么?
2回复

Python3活动线程的限制计数(完成的线程不会退出)

我想限制活动线程的数量。 我所看到的是,完成的线程会保持活动状态,并且不会退出自身,因此活动线程的数量一直在增长,直到出现错误为止。 以下代码一次仅启动8个线程,但是即使它们完成了,它们也仍然有效。 因此,这个数字一直在增长: 由于for循环,线程数一直增加到99。我知道一个线程已经
1回复

获取Python中当前方法/函数的名称

现在,我有两种方法来获取python中当前函数/方法的名称 基于功能 基于类 还有其他比这更容易和有效的方法吗?
2回复

对象成员函数被覆盖

当我尝试将不同的函数分配给不同的类成员时,最后声明的值将被覆盖。 class Object: def __init__(self, *args, **kwargs): passclass Service: @staticmethod def get_a_value
2回复

教授对Python作业的回答不会运行:TypeError:__init__()missing1requiredpositionalargument:'gender'

我确定以前有人问过这个问题,但我还没有达到能够理解其他问题如何回答我的水平。 有人可以解释这段代码的问题吗? 我看不到: PyCharm 中返回的错误是: