3

我试图让一些 args 在一个类中工作,我已经让它在一个函数中运行,来自How to use *args in a function? .

我正在尝试将该函数放入一个类中,但我似乎不明白如何初始化具有采用 *args的init函数的类。代码如下:

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

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

所以在这里我对如何处理'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

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

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

这些是出现的错误。

@alko,是的,你是对的。我正在寻找如何让init中的 *args正确传递。

4

2 回答 2

7

通过将参数传递给类构造函数来实例化对象。它们依次用__init__函数初始化。在您的示例中,这将是

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

该表达式的处理如下:

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

并阅读PEP 8以了解 Python 命名约定。那是:

类名通常应使用 CapWords 约定。

于 2013-11-07T08:19:55.637 回答
0

您的示例包含一个类,该类首先被实例化 - 这涉及调用__init__()- 然后被调用 - 这是通过调用来完成的__call__()

所以你的东西应该放在调用start = classname(...)中以便传递给__init__().

然而,对新实例化对象的调用将失败,除非它包含__call__()方法。如果你告诉我们什么,那会更容易回答

两者似乎都不起作用。

确切的意思。

于 2013-11-07T08:27:55.933 回答