使用 class 与输入连接实例属性

Concatenate Instance attribute using class with input

我对 python 非常陌生,对 OOP 和 class 也很陌生(我最初是 MATLAB 用户,作为一名工程师......)所以请尽可能多地教我。 无论如何,我正在尝试执行以下操作。

  1. 创建一个名为 Stock 的 class - 如下所示

    class Stock :
          def __init__(self,estimate,earning)
              self.estimate = estimate       # estimation of quarterly earnings
              self.earning = earning         # actual quarterly earnings
    
    JPM(JP Morgan stock name) = Stock(11.7,10.9)
    
  2. 但是,每个季度都会报告估算值和收益值,我想为每个创建一个数值向量。思路如下,当然不行。

    JPM.estimate(1) = 11.9   # the second quarter earnings value at index 1 of the estimate
    JPM.estimate(2) = 12.1   # the third quarter earnings value at index 2 of the estimate
    JPM.estimate(3) = XX.XX  # and so on.
    

    使用.estimate(#) 只是为了展示我想做的事情。使用 .append() 或其他您想教我的方法都可以。

我尝试这样做的原因是因为一只股票需要 3 个向量(我有大约 1000 只股票,所以最后我需要处理 3000 个向量)。所以我计划创建一个股票实例并将 3 个向量作为实例属性。 (希望我用对了术语。)

  1. 收益向量
  2. 估计向量
  3. 这些收入的报告日期。

我是否使用了 class 函数错误(因为它从未打算以这种方式使用?)或者我可以做些什么来实现这种连接,例如从网络抓取中接收数据时的实例属性?

完全不清楚您要对股票做什么 Class,但如果您想做的只是创建一个按日期组织的股票价格和收益列表,您可以执行以下 :

from collections import namedtuple, defaultdict

# Create a easily referenced tuple for defining staock data
StockData = namedtuple('StockData', ['date', 'earn', 'est']) 

class Stock:
    def __init__(self, data: StockData) -> None:
        self._quotes = defaultdict()
        self._quotes[data.date] = (data.earn, data.est)

    def add(self, data: StockData) -> None:
        self._quotes[data.date] = (data.earn, data.est)
        
    def value(self, date: str) -> tuple:
        # return tuple of (Earnings, Estimate) for date if it exists, else KeyError
        return self._quotes[date]

    def __repr__(self):
        return str(self._quotes)  

要用数据加载股票 class,您可以按照以下方式执行操作:

stk = Stock(StockData('1/20/2021', 123.5, 124.0))
stk.add(StockData('6/23/2021', 132.7, 119.4))

print(stk) 产量:

defaultdict(None, {'1/20/2021': (123.5, 124.0), '6/23/2021': (132.7, 119.4)})

并且,stk.value('1/20/2021')​ 产生 (123.5, 124.0)