强制覆盖方法python

时间:2017-12-14 10:35:34

标签: python override method-overriding

我有这段代码,我尝试使用自己的函数覆盖BitstampWSS的几个方法:

from bitex.api.WSS import BitstampWSS
import time
class Bitstamp(BitstampWSS):
    def __init__(self):
        wss = BitstampWSS()
        wss.channels=['order_book_xrpusd']
        wss.start()
        time.sleep(5999)    

    def order_book_callback(self, pair, data):
        print (pair)

    def xrpusd_ob_callback(self, data):
        print (data)

我没有尝试从BitstampWSS覆盖order_book_callback方法,但我的函数从未被调用,但是来自BitstampWSS的原始函数。

我做错了什么?

干杯

1 个答案:

答案 0 :(得分:2)

首先,您要创建的是您尝试子类化的类的实例。这是合法的,但通常没有多大意义。

接下来的事情是__init__()方法在返回之前会休眠近100分钟。因此,虽然新实例尚未初始化(因为__init__()尚未返回),但已创建BitstampWSS实例(类实例的内部实例),并且它已启动。因此,任何调用回调的消息都将调用BitstampWSS对象的回调,而不是类中的回调。

我认为这将实现您的期望:

from bitex.api.WSS import BitstampWSS

class Bitstamp(BitstampWSS):
    def __init__(self):
        super().__init__()    # calls BitstampWSS.__init__()
        self.channels = ['order_book_xrpusd']

    def order_book_callback(self, pair, data):
        print(pair)

    def xrpusd_ob_callback(self, data):
        print(data)

bitstamp = Bitstamp()
bitstamp.start()