我有一些使用__reduce__腌制的类实例。这些类具有我收集在另一个数组中的成员。我需要腌制这个数组,但找不到正确的方法。
只是为了澄清问题,想象一下我有代表正方形,矩形和圆形的类。我创建一些实例:

A=Square(10)
B=Rectangle(5,10)
C=Circle(6)


我可以泡菜

classes=[A, B, C]


但是我需要一种方法来腌制这个数组的类实例属性

dimensions=[A.side, B.y, C.diameter]


保留对原始对象的引用,以便如果一个对象发生更改,则相对属性也会发生变化:假设我调用C.grow(2),我希望有dimensions[2]=12

为了解决这个问题,我现在腌这本字典:

d={   classes: [A, B, C],
   dimensions: [(A,'side'), (B,'y'), (C,'diameter')] }


但是我认为这是一个非常糟糕的解决方案。

我感谢任何建议。

最佳答案

如果您拥有A.side这样的整数,则保留对象的原始引用的唯一方法是将其保留在列表中或包含其自己的类。

例如,您可以这样做:

class Value:
    def __init__(self, val):
        self.value = val


现在,您可以使SquareRectangleCircle使其对每个变量使用类Value

class Square:
    def __init__(self, side_length):
        self.side = Value(side_length)


然后在dimensions = [A.side, ...]之类的尺寸中使用它

注意,现在A.side是一个类-使用print(A.side)无法看到该值,但是使用print(A.side.value)可以看到该值

07-24 15:34