使用 class 与输入连接实例属性
Concatenate Instance attribute using class with input
我对 python 非常陌生,对 OOP 和 class 也很陌生(我最初是 MATLAB 用户,作为一名工程师......)所以请尽可能多地教我。
无论如何,我正在尝试执行以下操作。
创建一个名为 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)
但是,每个季度都会报告估算值和收益值,我想为每个创建一个数值向量。思路如下,当然不行。
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 个向量作为实例属性。 (希望我用对了术语。)
- 收益向量
- 估计向量
- 这些收入的报告日期。
我是否使用了 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)
我对 python 非常陌生,对 OOP 和 class 也很陌生(我最初是 MATLAB 用户,作为一名工程师......)所以请尽可能多地教我。 无论如何,我正在尝试执行以下操作。
创建一个名为 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)
但是,每个季度都会报告估算值和收益值,我想为每个创建一个数值向量。思路如下,当然不行。
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 个向量作为实例属性。 (希望我用对了术语。)
- 收益向量
- 估计向量
- 这些收入的报告日期。
我是否使用了 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)