在下面的代码中
class foo:
def __init__(self,x):
self.x = x
def do(self):
print(self.x)
foo1 = foo(1)
foo2 = foo(2)
t1=threading.Thread(target=foo1.do)
t2=threading.Thread(target=foo2.do)
t1.start()
t2.start()
我正在使用实例化对象的成员函数作为线程的目标。我想知道它为什么起作用,即线程模块是否做了一些特殊的事情来检测在可调用引用?我认为通常的回调机制如 ftplib.retrlines() 等将只接受普通的全局函数。完全远离这一切会更好吗?
拉尔提
PS:来自 C/C++ 的公开行为对我来说是新的(尽管欢迎)。
最佳答案
您可能想阅读有关 Python 的 method objects 的内容.
Python 的 self
有点像 C++ 的 this
,只不过你必须把它放在方法声明中。
当您在类中声明一个函数时,它会“变成”一个方法。当您获取一个对象的方法时,它就变成了一个绑定(bind)方法,它的第一个参数 (self
) 固定为您从中获取它的对象。
尝试:
class Foo(object):
def do(self):
print x
instance = Foo()
print Foo.do # prints <unbound method Foo.do>
print instance.do # prints <bound method Foo.do of <...>>
# These are equivalent:
Foo.do(instance)
instance.do()
在您的 Threading 案例中没有发生额外的魔法,它只是普通的 Python。
关于python - 'self' 从哪里来?将成员函数作为 threading.Thread 的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791035/