如何在python类中使用*args?

vim*_*mal 3 python class init args

我试图让一些args在一个类中工作,我已经在一个函数中运行了如何在函数中使用*args?.

我正在尝试将该函数放入类中,但我似乎并不了解如何初始化具有带*args 的init函数的类.代码如下:

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

if __name__ == "__main__":
    start = classname()
    start()
Run Code Online (Sandbox Code Playgroud)

所以在这里我很困惑如何处理'start()'.我必须使用'start(*sys.argv [1:])'或'start()'.两者似乎都不起作用.我希望在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
Run Code Online (Sandbox Code Playgroud)

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

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

这些是出现的错误.

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

alk*_*lko 6

通过将参数传递给类构造函数来实例化对象.它们反过来又具有__init__功能.在你的例子中,这将是

start = ClassName(*sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)

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

  1. 类名的新实例的实例与object.__new__(ClassName, *sys.argv[1:])命名start在当地的命名空间.从现在开始,start可以在if __name__ == "__main__"脚本中引用对象.
  2. 其内容依次初始化调用start.__init__(*sys.argv[1:]).请注意,args __init__与传递给构造函数的方法相同.

并阅读PEP 8的python命名约定.那是:

类名通常应使用CapWords约定.