Python 如何将一个列表从一个类传递到另一个类?

Python 如何将一个列表从一个类传递到另一个类?,python,Python,我不熟悉在python中使用多个类,我正在尝试创建一个股票类,该类保存单个股票的所有数据。但是,当我尝试对Stock类进行基本初始化时,数据变量注册为没有数据。我该如何解决这个问题,我做错了什么 一班 import Stock stock = Stock.Stock("MSFT") print(stock.data) 二班 class Stock(): data = [] def __init__(self, ticker): self.ticker = ticker

我不熟悉在python中使用多个类,我正在尝试创建一个股票类,该类保存单个股票的所有数据。但是,当我尝试对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()

输出:[]

当您执行
data=chart.getHistorical()
时,您正在创建一个新的局部变量,而不是在那里设置该变量
data=[]

您需要将范围扩展到
self
,这样做
self.data=chart.gethistory()
就足以解决您的问题

还要注意,使用列表作为类变量是危险的。当你这样做的时候

class Foo:
   bar = []
然后

foo1 = Foo()
foo2 = Foo()
foo1.bar.append('Hello from foo1')
print(foo2.bar)
您可能希望这会打印
[]
,但会打印
['Hello from foo1']
。这里的问题是,两个实例都有一个属性
bar
指向同一个数组对象,当您修改此对象时,两个实例都会看到修改。对于您的情况,您可以将
data=[]
放在类范围内,并将
self.data=…
放在方法范围内


我希望这有助于

在类方法中,您需要使用
self作为所有实例变量的前缀。
否则,当方法返回时,它们只是超出范围的局部变量。哇,真是让我大吃一惊。谢谢类内实例化的变量,而类外的方法都是类变量,而不是实例变量。