我想尝试移植到python3 this answer。但我不知道如何在python3中设置Thread.__init__
函数。
线程类中python2 Thread.__init__
的减速度为:
Thread.__init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None)
但是python3:
Thread.__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
注意:python3的结尾是:args=(), kwargs=None, *, daemon=None)
部分问题是我不明白如何处理函数减速中的星号*
。解释它的用途也会有所帮助。
只需使用python2引发:TypeError: __init__() takes from 1 to 6 positional arguments but 7 were given
我该如何编写python3 Thread.__init__
?
更新,示例中的python2调用是:
Thread.__init__(self, group, target, name, args, kwargs, Verbose)
我的逻辑怎么会说这可以在python3中运行,但事实并非如此,答案应该包括如何调用它,或指示如何构建它,包括kwargs:
Thread.__init__(self, group, target, name, args, kwargs, daemon)
答案 0 :(得分:1)
如果您需要重载它,请注意如何构建*
调用(或任何调用Foo
)以明确裸class Foo:
def __init__(self, b=30, *, c=40):
print(b, c)
之后的参数(即以密钥形式提供它们:
例如,如果您有一个c=<value>
类,其签名为:
FooChild
每当你调用它时,你都需要提供一个class FooChild(Foo):
def __init__(self, a, myval_1, my_val2):
print(a)
super().__init__(b, c=my_val2)
参数。因此,例如,如果您通过以下方式在c
类中重载它:
BaseClass.__init__
调用*args
时,您需要提供名称**kwargs
。
如果您有c
和__init__
,则在调用子类class FooBase(Foo):
def __init__(self, a, *args, **kwargs):
print(a)
super().__init__(*args, **kwargs)
时,您只需要显式提供FooBase(1, 2, c=30)
的值,即:
FooBase(1, 2, d=30)
可由FooBase(1, 2, 30)
调用,但不能与c
或__init__
调用。您需要将<a href="tel:XXXXXXXXXX">Call me!</a>
传递给document.location.href = "tel:XXXXXXXXXX";
,它需要它。