Python 面向对象和线程子类

Python 面向对象和线程子类,python,oop,python-multithreading,Python,Oop,Python Multithreading,当我们对threading类进行子类化时,在我们新类的\uuuuuu init\uuuuu方法中调用原始的threading\uuuuuuu init\uuuuu方法,本质上只是一笔勾销吗? 或者我们是在继承原始的\uuuu init\uuu方法的属性 这就是原始的\uuuu init\uuuu如何查找线程类(缩写形式) 现在,当我创建一个子类并定义myint时: class MyThread(threading.Thread): def __init__(self, number):

当我们对threading类进行子类化时,在我们新类的
\uuuuuu init\uuuuu
方法中调用原始的threading
\uuuuuuu init\uuuuu
方法,本质上只是一笔勾销吗? 或者我们是在继承原始的
\uuuu init\uuu
方法的属性

这就是原始的
\uuuu init\uuuu
如何查找线程类(缩写形式)

现在,当我创建一个子类并定义myint时:

class MyThread(threading.Thread):

    def __init__(self, number):
        threading.Thread.__init__(self)
        self.number = number
        print(number)
这是否意味着我正在覆盖原始线程类 init属性,例如

group=None, target=None, name=None,
    args=(), kwargs=None, *, daemon=None
因此只能访问我在 新的init方法

如果是,是否有办法仍然可以访问原始的init属性 当我创建新属性时,只需在这些属性之上添加
子类?

当前子类只能使用默认参数实例化
线程

为了避免重写参数,可以使用如下形式:

def __init__(self,
             subclass_positional_arg, *args,
             subclass_kw_arg=None, other_arg=None, **kwargs):
    super(MyThread, self).__init__(*args, **kwargs)
    # Do stuff with `subclass_positional_arg`, 
    # `subclass_kw_arg` and `other_arg`
您可以这样实例化它:

MyThread(positional, subclass_kw_arg=value)
MyThread(positional)
在您的特定情况下,您可以做以下两件事之一:

def __init__(self, *args, number, **kwargs):
    super(MyThread, self).__init__(*args, **kwargs)
    self.number = number

MyThread(number=<number>)  # You could also give a default value

不,您将可以访问在您调用的任何方法中分配给
self
的任何属性,包括基类
\uuuu init\uuuu
。谢谢=)。我来看看你的建议,看看我还有什么问题。
def __init__(self, *args, number, **kwargs):
    super(MyThread, self).__init__(*args, **kwargs)
    self.number = number

MyThread(number=<number>)  # You could also give a default value
def __init__(self, number, *args, **kwargs):
    super(MyThread, self).__init__(*args, **kwargs)
    self.number = number

MyThread(<number>)
# or
MyThread(number=<number>)
# Though you could no longer give a default value
def __init__(self, *args, **kwargs):
    # Use `kwargs.pop('number', <default value>)` to be optional
    number = kwargs.pop('number')
    super(MyThread, self).__init__(*args, **kwargs)
    self.number = number