【发布时间】: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