【问题标题】:Setting a class variable does not update instances of the original class设置类变量不会更新原始类的实例
【发布时间】:2019-10-20 03:13:16
【问题描述】:

我有一堂课:

class MusicCache(BaseDatabaseClass):
    dont_skip_duplicates = False

使用实例方法

def is_skip_set(self):
    if MusicCache.dont_skip_duplicates is False:
        # skip duplicates
    else:
        # don't skip duplicates

这个类有 5 个实例在运行。

然后我从另一个已导入MusicCache 的类中设置类变量:

class MQTTHandler(object):
    def set_skip_duplicates(self):
        MusicCache.dont_skip_duplicates = True

is_skip_set() 始终等于 false,即使在调用 set_skip_duplicates() 之后也是如此。

我尝试将 dont_skip_duplicates 设为实例变量,并将 MusicCache 的所有实例传递给 MQTTHandler,并使用 self.cache_instance_x.dont_skip_duplicates = True 设置每个实例的实例变量,但这也不起作用,我假设是因为当我传递实例时到MQTTHandler 我使用self 分配创建了一个本地实例。

我在 MusicCache 类中使用了 Java 样式的设置器,并将 dont_skip_duplicates 变量设置为 @property 以实现相同的目的,但似乎没有任何效果。

MusicCache 类的所有实例中设置此变量的最佳方法是什么?

【问题讨论】:

  • 请注意,不要对多行代码 sn-ps 使用反引号。
  • 另外,显示问题的minimal reproducible example
  • protip:不要使用is 来比较布尔值。使用== 或仅使用if some_boolean: whatever()is 工作由于 2 个实现细节:bool 子类 int 和小整数被缓存。对于所有使用is 比较布尔值来中断的程序,其中一个就足够了
  • 我尝试了类似的方法并且它有效,您实例化这些类并执行方法的代码是什么?也许那里有问题?
  • Your given code does not seem to be broken。发生了一些你没有告诉我们的事情......

标签: python python-multiprocessing class-variables


【解决方案1】:

经过一段时间的探索,我们意识到主循环正在运行一个多处理队列,我认为这会阻止跨类/实例的变量更新。

向主State类添加了multiprocessing.Event类型的变量,无法正确设置和获取变量状态。

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 2020-08-05
    • 1970-01-01
    • 2014-02-25
    • 2015-06-09
    • 2019-02-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多