Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Class_Inheritance_Target - Fatal编程技术网

Python 如何将继承的类函数赋予线程?

Python 如何将继承的类函数赋予线程?,python,multithreading,class,inheritance,target,Python,Multithreading,Class,Inheritance,Target,我以为这会打印出来 import threading class A: def func(self): print('asdf') class B(A): def func(self): print('1234') class C(A): def func(self): print('xyzw') def f(inner_func): class_list = [A(),B(),C()] thread_l

我以为这会打印出来

import threading
class A:
    def func(self):
        print('asdf')

class B(A):
    def func(self):
        print('1234')

class C(A):
    def func(self):
        print('xyzw')
def f(inner_func):
    class_list = [A(),B(),C()]
    thread_list = []
    for i in class_list:
        x=threading.Thread(target=inner_func(i,),args=())
        thread_list.append(x)
        x.start()
    for i in thread_list:
        i.join()
f(A.func)
但它只是印刷品

asdf
1234
xyzw
我如何一次使用继承类的函数,而不用手动操作? 我想给内函数一个参数,这样我就可以把它用于不同的函数。
例如,如果类A、B、C有另一个函数
func2
,我可以将其用作
f(A.func2)
或类似的东西。

在代码中,每个线程都执行
A.func
,并将
self
设置为
A
B
C
的实例。在任何情况下,它都不能访问
B.func
C.func
。Python中没有可能引用
A.func
B.func
C.func
的对象,具体取决于上下文

相反,您需要做的是传递希望执行的函数的名称,然后从所需的实例或类检索适当的函数。因此,最后一个调用需要是
f(“func”)
;需要适当更改功能
f
。具体地说,您可以使用
getattr(A,'func')
获取未绑定方法(然后可以将其作为
method(A())
调用),或者使用
getattr(A(),'func')
获取绑定方法(可以作为
method()
调用)

(同样,主题之外,但是对线程和实例使用
i
是非常混乱的,命名实例列表也是如此
class\u list


在代码中,每个线程都在执行
A.func
,并将
self
设置为
A
B
C
的实例。在任何情况下,它都不能访问
B.func
C.func
。Python中没有可能引用
A.func
B.func
C.func
的对象,具体取决于上下文

相反,您需要做的是传递希望执行的函数的名称,然后从所需的实例或类检索适当的函数。因此,最后一个调用需要是
f(“func”)
;需要适当更改功能
f
。具体地说,您可以使用
getattr(A,'func')
获取未绑定方法(然后可以将其作为
method(A())
调用),或者使用
getattr(A(),'func')
获取绑定方法(可以作为
method()
调用)

(同样,主题之外,但是对线程和实例使用
i
是非常混乱的,命名实例列表也是如此
class\u list

asdf
asdf
asdf
def f(method_name):
    instance_list = [A(), B(), C()]
    thread_list = []
    for instance in instance_list:
        thread = threading.Thread(target=getattr(instance, method_name), args=())
        thread_list.append(thread)
        thread.start()
    for thread in thread_list:
        thread.join()

f('func')