我有这段代码,我正在尝试,我不知道如何修改实例属性,当我使用它们作为参数时,调用一个方法。你知道吗
class Portfolio(object):
def __init__(self):
self.qtyA = 50
self.qtyB = 0
self.qtyC = 0
self.cash = 0
def __str__(self):
return ("%d %d %d %.2f")%(self.qtyA, self.qtyB, self.qtyC, self.cash)
def buy(self, stockQty, qtyToBuy, price, commission=20):
stockQty += qtyToBuy
print stockQty
buyTransaction = price * qtyToBuy
self.cash -= buyTransaction + commission
>>> p = Portfolio()
>>> p.buy(p.qtyA,10,25)
60
>>> print p
50 0 0 -270.00
当调用buy
时,一个新变量stockQty
正在被创建。我希望传递对属性qtyA
的引用,而不是值。此问题可能与以下问题有关:How do I pass a variable by reference?
如何解决这个问题?你知道吗
如
@vhallac
所述,您可以使用setattr
或getattr
方法分别设置和获取属性值。实际上,您不需要将object属性传递给函数。您可以在函数中直接访问它并进行更新:是的。你知道吗
您需要传递一个可以修改的值,然后修改它。不能修改数字:
a
可以从引用23
改为引用42
,但不能使23
变为42
,反之亦然。你知道吗在你的例子中,做这件事的自然方法是注意到你正在做的另一件愚蠢的事情——并行使用一堆相关的、类似名称的变量——并通过用序列替换它们来解决这个问题。
list
类型是一个可修改的序列。您需要传递列表本身,而不仅仅是一个数字量,并指示要替换列表中的哪个元素。但实际上不需要传递列表,因为它已经是self
的一部分。你知道吗对于更灵活的解决方案,您可以考虑在股票名称和股票数量之间建立关联——毕竟,谁知道客户将来可能想要什么股票。我们可以简单地用
dict
来代替。你知道吗(固定的‘佣金’成本也是不现实的;百分比更有意义。)
一种简单的方法是将字符串作为stockQty传递,其中包含要修改的成员的名称(例如“qtyA”),并使用
getattr(self, stockQty)
读取和setattr(self, stockQty, newVal)
更改此参数的值。你知道吗如果您不喜欢传入自由格式字符串,可以定义一些类变量,例如
refQtyA = "qtyA"
,并在调用函数时将它们用作参数:buy(p.refQtyA, 10, 25)
。你知道吗相关问题 更多 >
编程相关推荐