将动态变量继承到内部类

2024-10-01 11:35:39 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是背景,让您了解我的工作内容:

我正在使用的代码以WebsocketClient()类作为外部类开始,外部类是通过在主类中将其作为对象调用而继承的(除非我误解了它的工作原理)。然后它使用on_message()方法来做某些事情,并根据来自websocket服务器的消息更新一个全局变量(红黑二叉树)(从websocket消息中添加的全局变量的键通常是随机的,并且每秒更改/更新多次。)

main类有一个内部类,它读取RBTree并显示其中的信息

所有这些都很好用,这是别人的代码(都是开源的)。但是当我向主类添加一个方法来读取RBTree并从中输出不同的信息时,RBTree似乎停止了更新

class MainClass(WebsocketClient):
    def __init__(self):
        super(MainClass, self).__init__()
        self._glbtree = RBTree()
    def on_message(self, message):
        #
        # stuff to update _glbtree
        #
        self.new_method()
    def new_method(self):
        print(self._glbtree.min_key())
    class InnerClass(MainClass):
        def __init__(self):
            super(MainClass, self).__init__()
        def on_message(self, message):
            super(MainClass, self).on_message(message)
            print(self._glbtree.max_key())
    iclass = InnerClass()
    iclass.start()
    try:
        while True:
            time.sleep(10)
    except KeyboardInterrupt:
        iclass.close()

内部类运行并打印.max_key()的最新值,但是当我取消new_method(self)注释并注释掉整个内部类和最后七行时,它会加载_glbtree一次并更新它拥有的键,但是一旦我的new_method()开始运行,就不会获取新键或删除旧键。因此,它运行的次数越多,.min_key()的结果就越旧(如中所示,很可能还有其他应该从_glbtree添加或删除的键应该出现,但是没有出现)

注意:还有很多其他的事情(计算等)正在发生,但是上面的代码很有希望能让你了解发生了什么


Tags: key代码selfmessagenewinitondef