gpt4 book ai didi

python - python3中如何重载Thread类的__init__函数?

转载 作者:行者123 更新时间:2023-11-28 18:27:25 25 4
gpt4 key购买 nike


我正在尝试移植到 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)

最佳答案

如果你需要重载它,请注意你如何构造你的 super调用(或任何调用 Thread.__init__ )以明确 * 之后的参数(即以 key 形式提供它们):

例如,如果您有一个 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__ , 它需要它。

关于python - python3中如何重载Thread类的__init__函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40340266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com