0

我有一个应用程序,我想让一个类的第一个实例可供该类的所有后续实例访问。我实现了这样的:

class Basic(object):
    def __init__(self, initial=False):
        super(Basic, self).__init__()
        if initial:
            Basic.initial = self

它工作得很好,但是当我尝试使用pickleor对其进行序列化时dill,动态创建的类属性Basic.initial无法正确序列化(如何使用 dill 将所有类变量写入磁盘?)。

有人告诉我,我正在做的事情是“糟糕的”,我可以理解这一点,因为它看起来确实有点迂回。

我希望第一个实例可以在未来的所有实例中使用,而无需不断地传递它。

有没有更好的方法来实现这一点?也许可以正确序列化?

4

1 回答 1

0

我最终制作了一个类似这样的模块:

class BasicInit(object):
    def __init__(self):
        super(BasicInit, self).__init__()

    def read(self):
        #read some stuff from files...

    def work(self):
        #do whatever work

initial_thing = BasicInit()
initial_thing.read()

class Basic(BasicInit):
    initial = initial_thing
    def __init__(self):
        super(Basic, self).__init__()

虽然这似乎又是迂回的,但它似乎奏效了。

也许有更优雅的解决方案?

于 2017-03-13T19:04:49.843 回答