Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用位置参数和关键字参数初始化类_Python_Python 3.x_Class_Arguments - Fatal编程技术网

Python 如何使用位置参数和关键字参数初始化类

Python 如何使用位置参数和关键字参数初始化类,python,python-3.x,class,arguments,Python,Python 3.x,Class,Arguments,我试图创建一个类,该类允许使用参数的默认值或传递给它的值进行初始化。此外,我希望能够将这些参数作为位置参数或关键字参数传递。但是,当我尝试用任意数量的位置参数创建它时,如果我得到一个TypeError:\uuuu init\uuuu()接受1个位置参数,但给出了2个 class Foo: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) args_list = Or

我试图创建一个类,该类允许使用参数的默认值或传递给它的值进行初始化。此外,我希望能够将这些参数作为位置参数或关键字参数传递。但是,当我尝试用任意数量的位置参数创建它时,如果我得到一个
TypeError:\uuuu init\uuuu()接受1个位置参数,但给出了2个

class Foo:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        args_list = OrderedDict()
        args_list.update(x=1,
                        y=2,
                        z=3)
        args_list.update(kwargs)

        iter_args_list = enumerate(args_list)
        for positional_arg in args:
            (_, key_value) = next(iter_args_list)
            args_list[key_value] = positional_arg

        for argument_key, argument_value in args_list.items():
          setattr(self, argument_key, argument_value)

问题可能是您将
args
kwargs
传递给
super()
,而
object
不喜欢这样,因为
object
不接受(命名或未命名)参数。所以你应该重写:

class Foo:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # ...
Foo类:
定义初始化(self,*args,**kwargs):
super()
#…
致:

Foo类:
定义初始化(self,*args,**kwargs):
super()。\uuuu init\uuuuu()

#…
您会遇到什么类型的错误?请提供完整的回溯。
TypeError:\uuuu init\uuuuu()接受1个位置参数,但给出了2个
,编辑了主要帖子以供将来参考:始终包括错误消息(和回溯)。显然有错误(否则你不会问问题),但这有助于显示你的错误。谢谢你的回复,不幸的是,它似乎没有help@Cons:用新错误编辑您的问题,并进行完整的回溯。@缺点:我认为
Foo
有一个超类,您不共享。因此,无法调试它,因为您进行了
super()。\uuuu init\uuuu
调用,因此我们至少需要该函数的签名。哦,我的错误,它确实起作用了。现在的问题是如何实际分配参数。它无法处理长度超过1个字符的关键字,但我想这是一个单独的问题issue@Cons:你能提供你得到的错误吗?我设法构造了一个
Foo(ab=2)
class Foo:
    def __init__(self, *args, **kwargs):
        super().__init__()
        # ...