如何将一个列表从一个班级传递到另一个班级?

时间:2019-06-10 23:55:18

标签: python

我不熟悉在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()

输出:[]

1 个答案:

答案 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 = ...放在方法范围内

我希望这会有所帮助