在 __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
为什么在 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