1

我在 Python 中扩展 Thread 类时遇到问题。这是我的简单代码:

import threading

class position:

    def __init__(self,id):
        self.id = id

class foo(threading.Thread):

    def __init__(self):
        self.start = position(0)
        threading.Thread.__init__(self)

    def run(self):
        pass

if __name__ == '__main__':
    f = foo()
    f.start()

显示的错误是:

Traceback (most recent call last):
  File "foo.py", line 19, in <module>
    f.start()
AttributeError: position instance has no __call__ method

错误在哪里?我花了 3 个小时寻找解决方案,但我找不到。我在工作期间多次扩展 Thread 类,但这次它不起作用。

4

2 回答 2

6

您已经用您的实例覆盖了该start方法。position以不同的方式命名您的position财产。

例如

import threading

class position:

    def __init__(self,id):
        self.id = id

class foo(threading.Thread):

    def __init__(self):
        self.start_position = position(0)   # self.start is now unharmed
        threading.Thread.__init__(self)

    def run(self):
        pass

if __name__ == '__main__':
    f = foo()
    f.start()
于 2012-12-29T14:45:37.403 回答
2

您已经在构造函数中隐藏了Thread.start带有start字段的方法。

重命名该字段(例如,将其命名为 startedAt),或者如果您坚持将其命名为start,请使用foo.start(f)

于 2012-12-29T14:46:47.280 回答