如何在python类中使用* args?

时间:2013-11-07 08:18:08

标签: python class init args

我正在尝试让一些args在一个类中工作,我已经在How to use *args in a function?的函数中运行了它。

我试图让这个功能进入一个班级,但我似乎并不了解如何初始化那个具有 init 功能的类使用* args。代码如下:

class classname(object):
    def __init__(self, *args):
        <code-snip>
        ...
        </code-snip>

if __name__ == "__main__":
    start = classname()
    start()

所以在这里我对如何处理&#39; start()&#39;感到困惑。我是否必须使用&#39; start(* sys.argv [1:])&#39;或者&#39; start()&#39;。两者似乎都不起作用。我希望正确传递 init 中预期的* args。

请指点。

非常感谢..

==

如果我不清楚详细说明它是如何工作的,我很抱歉。

a)使用start(* sys.argv [1:])

Traceback (most recent call last):
  File "check.py", line 126, in <module>
    start(*sys.argv[1:])
TypeError: 'check' object is not callable

b)使用start()时,我得到:

Traceback (most recent call last):
  File "check.py", line 126, in <module>
    start()
TypeError: 'check' object is not callable

这些是出现的错误。

@alko,是的,你是对的。我正在研究如何正确地传递 init 中的* args。

2 个答案:

答案 0 :(得分:6)

通过将参数传递给class constructor来实例化对象。它们又被__init__函数初始化。在你的例子中,这将是

start = ClassName(*sys.argv[1:])

该表达式按如下方式处理:

  1. 使用本地namespace中名为object.__new__(ClassName, *sys.argv[1:])的{​​{1}}实例化新类名实例。从现在开始start对象可以在start脚本中引用。
  2. 其内容依次初始化,调用if __name__ == "__main__"。请注意,start.__init__(*sys.argv[1:])的args与构造函数相同。
  3. 阅读PEP 8了解python命名约定。那就是:

      

    类名通常应使用CapWords惯例。

答案 1 :(得分:0)

您的示例包含一个首先实例化的类 - 包括调用__init__() - 然后调用 - 这是通过调用__call__()完成的。

因此,您的内容应放入调用start = classname(...),以便传递给__init__()

然而,对新实例化对象的调用将失败,除非它包含__call__()方法。 如果您告诉我们

,那会更容易回答
  

两者似乎都不起作用。

完全意味着。