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')