运行创建的类时出错:“模块”对象不可调用

Posted

技术标签:

【中文标题】运行创建的类时出错:“模块”对象不可调用【英文标题】:Error to run created Class: 'module' object is not callable 【发布时间】:2021-03-25 13:12:15 【问题描述】:

刚刚创建了这个类来打印一些交互式图表,但我遇到了不同的错误。最近的是:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-29-ee093d057bde> in <module>
     25 
     26 if __name__ == '__main__':
---> 27     ChartsPropylene()

<ipython-input-29-ee093d057bde> in __init__(self)
      1 class ChartsPropylene():
      2     def __init__(self):
----> 3         self.start_date=dt(2008, 4, 24)
      4         self.end_date=dt(2020, 5, 24)
      5         self.dates=pd.date_range(self.start_date, self.end_date, freq='D')

我创建的类代码如下:


import sys, os
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import ipywidgets as widgets
from ipywidgets import interact
import cufflinks as cf
import datetime as dt
from IPython import display

class ChartsPropylene():
    def __init__(self):
        self.start_date=dt(2008, 4, 24)
        self.end_date=dt(2020, 5, 24)
        self.dates=pd.date_range(self.start_date, self.end_date, freq='D')
        self.options=[(date.strftime(' %d %b %y '), date) for date in self.dates]
        self.index=(0, len(self.options)-1)
        self.selection_range_slider=widgets.SelectionRangeSlider(options=self.options, index=self.index, description='Dates', orientation='horizontal', layout='width':'600px')
    def __printChart__(self):
        display(self.selection_range_slider)
        x=self.selection_range_slider.get_interact_value()[0].toordinal()
        y=self.selection_range_slider.get_interact_value()[1].toordinal()
        abs1=abs(y-x)
        plt.figure(figsize=(18, 10))
        sns.set(style="darkgrid")
        palette2=sns.color_palette("mako_r", 3)
        sns.lineplot(x="Date", y="Value", hue='Std_Type', style='Value_Type', sizes=(.25, 2.5), ci='sd', estimator=None, lw=1, palette=palette2, data=tbl4)
        rectangle1=plt.Rectangle(xy=(x, 500), width=abs1, height=500, linewidth=2, color='red', facecolor='blue', joinstyle='round', alpha=0.1, fill=True)
        rectangle2=plt.Rectangle(xy=(x, 500), width=abs1, height=500, linewidth=2, color='red', facecolor='blue', joinstyle='round', alpha=1, fill=False)
        plt.gca().add_patch(rectangle1)
        plt.gca().add_patch(rectangle2)
        plot.show(10)

我做错了什么?

我尝试导入类并运行,但出现了同样的错误。

【问题讨论】:

不要编自己的__X__名字;他们是reserved by Python。 【参考方案1】:

datetime(您的代码中的dt)不可调用,它是一个模块。

您的意思是dt.date(2008, 4, 24),或者可能是import datetime.date as dt(我猜如果您称它为dt,第一个更有意义......)。 datetime.datedatetime 内部的一个可调用类。

您的问题中没有提到但值得一提(不要在稍后阶段混淆)是datetime.datetimedatetime 中的另一个可调用类。

【讨论】:

以上是关于运行创建的类时出错:“模块”对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章

使用 nms 时出错,:“模块”对象不可调用

静态代码块

二进制 XML 文件第 13 行:在扩展 VideoView 的类上膨胀类时出错

python(18):类(2)

尝试在 Python 3 中使用 C++ 类时出错

Python面向对象编程和模块