Python 3.x AttributeError:type object';CalculaVariaciones';没有属性';雷托诺斯"日报"&"x27;

Python 3.x AttributeError:type object';CalculaVariaciones';没有属性';雷托诺斯"日报"&"x27;,python-3.x,jupyter-lab,Python 3.x,Jupyter Lab,我正在学习面向对象的作文。在我下面展示的脚本中,我试图应用组合而不是继承。我不太理解这个组成部分,以这个脚本为例,我想我可以更容易地完成它 import os import pandas as pd import datetime as dt import numpy as np import matplotlib.pyplot as plt class ImportaYahoo: def __init__(self): self.df_apple = pd.DataF

我正在学习面向对象的作文。在我下面展示的脚本中,我试图应用组合而不是继承。我不太理解这个组成部分,以这个脚本为例,我想我可以更容易地完成它

import os
import pandas as pd
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt

class ImportaYahoo:
    def __init__(self):
        self.df_apple = pd.DataFrame({})
        self.apple_close = pd.DataFrame({})    
    
    def importar_cotizaciones (self):
        # Importar cotizaciones de Apple
        import yfinance
        name = 'AAPL'
        ticker = yfinance.Ticker(name)
        self.df_apple = ticker.history(interval="1d",start="2017-01-4",end="2021-04-10")
        self.apple_close = self.df_apple[["Close"]]

class CalculaVariaciones:
    
    def __init__(self, importar_yahoo):
        self.df_yahoo = importar_yahoo
        self.retornos_diarios = pd.DataFrame({})
        self.log_retornos_diarios = pd.DataFrame({})
        
    def calc_retornos_diarios(self):
        # Porcentaje de variación diaria
        self.retornos_diarios = self.df_yahoo.apple_close.pct_change()
        self.retornos_diarios.fillna(0, inplace=True)
        self.retornos_diarios.dropna(inplace = True)
    
    def calc_log_retornos_diarios(self):
        self.log_retornos_diarios = np.log(self.df_yahoo.retornos_diarios + 1)
        
class DibujaHistograma():  
    def __init__(self, CalculaVariaciones ):
        self.variaciones = CalculaVariaciones
        
    def mostrar_histograma (self):
        # Plot the histogram
        print("\n*******************************************************")        
        self.variaciones.retornos_diarios.hist(bins = 100, color='blue', figsize=(15, 8))
        plt.ylabel('Frecuencia')
        plt.xlabel('Retornos diarios')
        plt.title('Histograma de los retornos diarios')
        plt.show()        
        
importar_yahoo = ImportaYahoo()
importar_yahoo.importar_cotizaciones() 

calcula_variaciones = CalculaVariaciones (importar_yahoo)
calcula_variaciones.calc_retornos_diarios()
#calcula_variaciones.calc_log_retornos_diarios()

histograma = DibujaHistograma(CalculaVariaciones)
histograma.mostrar_histograma ()
它返回以下错误


AttributeError回溯(最近一次呼叫上次) 在里面 55 56组织图=组织图(结石) --->57 Historograma.mostrar_Historograma() 58 59

在mostrar_Historograma(自我) 41#绘制直方图 42打印(“\n****************************************************************************”) --->43 self.variaciones.retronos_diarios.hist(箱子=100,颜色='blue',尺寸=(15,8)) 44 plt.ylabel('Frecuencia') 45 plt.xlabel('Retronos diarios')

AttributeError:类型对象“CalcularAvariaciones”没有属性“Retronos_diarios”


在这个例子中应用构图,我做错了什么?我将感谢您的帮助。

这是因为在
DibujaHistograma
中,您传递的是类(
CalculaVariaciones
),而不是它的对象(
calcula\u variaciones
)。谢谢,我实际上传递的是类,而不是对象。正确的做法是。def _uinit _u;(self,calculate_variations):self.variations=calculate_variations经过此更正后,我得到错误“AttributeError:type object'Calculateralvariaciones'没有属性'retronos_diarios'”。你不知道为什么。不,我的意思是当你在做《组织图》的时候。它应该是
histograma=DibujaHistograma(calcula_variaciones)
。看看这行不行。谢谢,现在它工作正常了。正如您所指出的,我的错误是我弄乱了类和对象的名称。