Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在ClassB中更改ClassA实例变量_Python_Class_Object_Dill - Fatal编程技术网

Python在ClassB中更改ClassA实例变量

Python在ClassB中更改ClassA实例变量,python,class,object,dill,Python,Class,Object,Dill,我试图通过dill加载整个类实例,而不是一次一个地转储和加载每个类变量 有人能告诉我怎么做吗: class Object(object): pass class ClassA: def __init__(self): self.DATA = "Initial" class ClassB: def __init__(self, CA): self.CA = CA def updateValue(self): #a

我试图通过dill加载整个类实例,而不是一次一个地转储和加载每个类变量

有人能告诉我怎么做吗:

class Object(object):
    pass

class ClassA:
    def __init__(self):
        self.DATA = "Initial"

class ClassB:
    def __init__(self, CA):
        self.CA = CA

    def updateValue(self):
        #a = dill.load(ClassA.storage)
        a = Object()
        a.DATA = "new value"
        self.CA = a
        print self.CA.DATA

CA = ClassA()
CB = ClassB(CA)
CB.updateValue()
print CA.DATA
因此,输出为:

new value
new value

在您的
updateValue

def updateValue(self):
    self.ca.DATA = "new value"
我想你是在问:

给定对象A和对象B,如何一步(或编程)将A的所有属性复制到B

天真的方法:

B.__dict__ = dict(A.__dict__) # make a copy so objects don't share same dict
这种方法的问题在于,它会破坏B中任何在A.eg中不存在的预先存在的属性

B.attr = "some value"
B.__dict__ = dict(A.__dict__)
print(hasattr(B, "attr")) # expect False
更好的方法。这种方法复制A的属性,并将存在于B上但不存在于A上的任何属性单独保留

B.__dict__.update(A.__dict__)

但是,如果要复制的类及其父类上的属性仍然存在问题。但我认为这是一个不同的问题

谢谢,但问题是不必指定“数据”就可以完成吗?您的用例是什么?我是说,你想实现什么?从问题来看,您似乎想更改一个类的成员。我弄错了吗?谢谢,正是我想要的。我是莳萝的作者。我认为您不需要为此进行序列化,除非您希望跨会话持久化对象@沙丘显示了更合适的路线。