-4

我有这样的代码。

....
class SocketWatcher(Thread):
    ....
    def run(self):
       ....
       TicketCounter.increment()  # I try to get this function  
       ...
....
class TicketCounter(Thread):
    ....
    def increment(self):
    ...

当我运行程序时,我得到了这个错误。

TypeError: unbound method increment() must be called with TicketCounter instance as first argument (got nothing instead)

我有什么方法可以从 TicketCounter 类调用 increment() 函数到 SocketWatcher 类?还是我的电话错了...

4

3 回答 3

4

您必须先创建该类的实例,TicketCounter然后才能从中调用任何函数:

class SocketWatcher(Thread):
    ....
    def run(self):
       ....
       myinstance = TicketCounter()
       myinstance.increment()

否则,该方法不会在任何地方绑定。创建实例会将方法绑定到实例。

于 2013-09-14T13:22:18.090 回答
0

你正在传递自我,所以我假设你需要创建一个实例。但是,如果该方法确实不需要实例,那么您可以使用@classmethodor@staticmethod装饰器,您的代码就可以工作:

class TicketCounter(Thread):
    @classmethod
    def increment(cls):
        ...

或者

class TicketCounter(Thread):
    @staticmethod
    def increment():
        ...

两者都可以称为TicketCounter.increment()

于 2013-09-14T15:09:06.043 回答
0

成员函数是类实例的一部分。因此,无论何时要调用,都必须始终使用 Class 的实例而不是 Class 名称本身来调用它。

你可以这样做:

TicketCounter().increment()

它的作用是初始化一个对象,然后调用这个函数。下面的例子会很清楚。

class Ticket:

    def __init__(self):

        print 'Object has been initialised'

    def counter(self):

        print "The function counter has been invoked"

输出来说明这一点:

>>> Ticket().counter()
Object has been initialised
The function counter has been invoked
>>> 
于 2013-09-14T14:29:09.370 回答