【发布时间】:2020-01-16 23:56:04
【问题描述】:
我正在使用 Python 创建一个股票筛选器。我的数据看起来像这样。由于数据的格式,我正在尝试使用嵌套类(我认为这就是我正在做的)来引用数据。 Data Image
这是我的课程的代码:
class FieldClass:
def __init__(self, parts):
if parts[2].replace(" ", "") == 'Price':
self.price = YearClass(parts)
elif parts[2].replace(" ", "") == 'Revenues':
self.rev = YearClass(parts)
elif parts[2].replace(" ", "") == 'OperatingIncome':
self.opincome = YearClass(parts)
elif parts[2].replace(" ", "") == 'OperatingMargin':
self.opmargin = YearClass(parts)
elif parts[2].replace(" ", "") == 'NetProfitMargin':
self.profitmargin = YearClass(parts)
class YearClass:
# creates a class whose objects/attributes are a dict of each year of data
def __init__(self, parts):
self.years_data = dict()
self.years_data[2009] = (parts[3])
self.years_data[2010] = (parts[4])
self.years_data[2011] = (parts[5])
self.years_data[2012] = (parts[6])
self.years_data[2013] = (parts[7])
self.years_data[2014] = (parts[8])
self.years_data[2015] = (parts[9])
self.years_data[2016] = (parts[10])
self.years_data[2017] = (parts[11])
self.years_data[2018] = (parts[12])
self.years_data[2019] = (parts[13])
这是我在代码中调用/引用类的方式:
def data_prep(fname):
tkr_list = []
data_dict = dict()
with open(fname) as f_in:
f_in.readline()
for lines in f_in:
parts = lines.strip('\n').split(",")
tkr = parts[1]
key_cat = parts[2].replace(" ", "")
if tkr not in tkr_list:
tkr_list.append(tkr)
for tkr in tkr_list:
data_dict[tkr] = FieldClass(parts)
var = data_dict['FLWS'].opincome.years_data[2010]
这是我得到的错误:
AttributeError: 'FieldClass' object has no attribute 'opincome'
谁能告诉我我做错了什么?
【问题讨论】:
-
您的
FieldClass实例不会有opincom属性,除非此语句为真:parts[2].replace(" ", "") == 'OperatingIncome'。因此,似乎该陈述永远不会正确。这应该很容易调试:您是否验证了parts[2].replace(" ", "")是您认为的那样? -
FWIW,你的类没有嵌套。其中一个只包含另一个的实例。 “嵌套”将定义一个 inside 另一个,这在 Python 中并不经常使用。
标签: python class inner-classes attributeerror