我不熟悉在python中使用多个类,并且试图创建一个Stock类,该类包含单个股票的所有数据。但是,当我尝试执行Stock类的基本初始化时,数据变量注册为没有数据。如何解决此问题,我在做什么错了?
第一课
import Stock
stock = Stock.Stock("MSFT")
print(stock.data)
第二堂课
class Stock():
data = []
def __init__(self, ticker):
self.ticker = ticker
from yahoo_historical import Fetcher
chart = Fetcher(ticker, [2019, 1, 1], [2019, 6, 1])
data = chart.getHistorical()
输出:[]
答案 0 :(得分:1)
执行data = chart.getHistorical()
时,您将创建一个新的局部变量,而不是在该变量上设置该变量data = []
。
您需要将范围限制在self
上,这样self.data = chart.getHistorical()
就可以解决您的问题。
还请注意,将列表用作类变量是危险的。当你做
class Foo:
bar = []
然后
foo1 = Foo()
foo2 = Foo()
foo1.bar.append('Hello from foo1')
print(foo2.bar)
您希望它会打印[]
,但会打印['Hello from foo1']
。这里的问题是两个实例都具有指向同一数组对象的属性bar
,当您修改该对象时,都可以看到修改。对于您而言,您只需将data = []
放在类范围内,并将self.data = ...
放在方法范围内
我希望这会有所帮助