Python PNL OOP,如何使用其他类的属性

2024-04-26 18:35:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划设计一个程序来跟踪我的股票账户的盈亏情况,然后我使用Python并希望用一种面向对象的方法来解决它。你知道吗

代码:

class PNL(object):
    stock_amount = {}
    def __init__(self,cash,position):
        self.cash = cash
        self.position = position

    def buy(self,Stock,amount):
        pass
    def sell(self,Stock,amount):
        pass
    def stock_amt(self,Stock):
        if Stock().symbol not in stock_amount:
            stock_amount[Stock().symbol] = 0
        else:
            return stock_amount


class Stock():
    def __init__(self,symbol,timestamp,price):
        self.symbol = symbol
        self.time = timestamp
        self.price = price

a = PNL(0,0)
APPL = []
APPL.append(Stock('APPL',0,10))
APPL.append(Stock('APPL',1,12))
a.stock_amt('APPL')
for stock in APPL:
    if stock.time == 0:
        print stock.price

但这样不行,有人知道吗?你知道吗


Tags: selfinitdefstockpositioncashpasssymbol
1条回答
网友
1楼 · 发布于 2024-04-26 18:35:39

首先需要修复类PNL,当用Stock作为参数/参数声明方法时,最好选择另一个名称,或者用小写字母编写,以区别于类Stock。你知道吗

假设您将为这些方法提供一个实例,无需编写类型,顺便说一下,无需通过执行Stock().symbol来再次实例化方法中的类,您将提供一个实例,或者直接提供属性符号(如果您愿意)。你知道吗

此外,库存量可以存储为实例属性,如下所示:

class PNL(object):

    def __init__(self,cash,position):
        self.cash = cash
        self.position = position
        self.stock_amount = {}

    def buy(self,stock,amount):
        pass
    def sell(self,stock,amount):
        pass
    def stock_amt(self,stock):
        if stock.symbol not in self.stock_amount:
            self.stock_amount[stock.symbol] = 0
        else:
            return self.stock_amount

然后当你调用你的类时,我认为你想在你构建的列表APPL上循环(然后只调用a.stock_amt(stock_object_created)

a = PNL(0,0)
APPL = []
APPL.append(Stock('APPL1',0,10))
APPL.append(Stock('APPL2',1,12))

for stock in APPL:
    a.stock_amt(stock)
    if stock.time == 0:
        print stock.price
print a.stock_amount

#>>>10
#>>>{'APPL2': 0, 'APPL1': 0}

相关问题 更多 >