在 __init__ Python 之外声明的变量

varibles declared outside __init__ Python

为什么在 init 方法之外声明的变量不具有可加性 属性? 例如我有以下 class:

class Trade:
    allTrades = []
    netPosition = 0

    def __init__(self, qty):
        self.quantity = qty

        self.allTrades.append(self.quantity)
        self.netPosition += self.quantity

allTrades(空列表)和 netPosition 变量在 init 方法之外定义,而数量变量在内部定义。

接下来我创建我的 class 的 2 个对象并为它们中的任何一个打印 AllTrades 和 netPosition:

deal1=Trade('long', 50, 31)
deal2=Trade('long', 16, 39)

print(deal2.allTrades)
print(deal2.netPosition)

据我所知,allTrades(列表)变量是可加的,而 netPosition 不是: print(deal2.allTrades) returns [50, 16]。 print(deal2.netPosition) returns 16 但是我认为它应该 return 66

如何让 print(deal2.netPosition) return 66 而不是 16?

您的 __init__ 函数创建了两个对象变量,它们是对同名 class 变量的引用。到目前为止一切顺利。

当您调用 self.allTrades.append 时,您正在修改(或 变异 )您的 allTrades 对象,该对象在 [=30] 的所有对象之间共享=].

当您执行 self.netPosition += 时,您 不是 修改 netPosition,因为数字是不可变的。相反,您要用另一个 different 数字对象的引用替换您的引用。这意味着您已经断开了对象变量和 class 变量之间的连接。没有其他对象会看到这些更改。

要获得您期望的结果,您需要将您的号码放入另一个可变对象中。

netPosition = [0]

self.netPosition = netPosition

self.netPosition[0] += self.quantity