Python 面向对象和线程子类
当我们对threading类进行子类化时,在我们新类的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):
\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