Python 如何重写此类中的函数?
我正在使用pygal库创建图表,并希望覆盖一些函数,例如_tooltip_data函数等。首先,我试图覆盖_title函数(为了创建文本,我意识到我可以做:gauge.title=“Blah title”,但我想覆盖_title函数中的一些其他内容) 我迷路了。为了创建量表图表,我创建了一个量表类,它继承自MyGraph类,继承自pypal的Graph类。如果我尝试创建MyGauge图表,则会出现错误:Python 如何重写此类中的函数?,python,pygal,Python,Pygal,我正在使用pygal库创建图表,并希望覆盖一些函数,例如_tooltip_data函数等。首先,我试图覆盖_title函数(为了创建文本,我意识到我可以做:gauge.title=“Blah title”,但我想覆盖_title函数中的一些其他内容) 我迷路了。为了创建量表图表,我创建了一个量表类,它继承自MyGraph类,继承自pypal的Graph类。如果我尝试创建MyGauge图表,则会出现错误: AttributeError: 'module' object has no attribu
AttributeError: 'module' object has no attribute 'MyGauge'
这是我的代码,我确信有很多错误。请记住,我仍然是一个新手(我可能不必告诉您,您可以通过查看我的代码猜到这一点)
我卡住了。我甚至尝试创建一个MyPygal类,它继承自pygal,这样我就可以覆盖图表的名称
class MyPygal(pygal):
def __init__(self):
CHARTS_NAMES = [
'Line',
'StackedLine',
'XY',
'Bar',
'HorizontalBar',
'StackedBar',
'HorizontalStackedBar',
'Pie',
'Radar',
'Funnel',
'Pyramid',
'VerticalPyramid',
'Dot',
'Gauge',
'MyGauge' # my new chart type
]
我用“MyPygal.MyGauge”调用它,但由此得到错误:
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
我的思路是否正确?如果您在自己的文件中创建了自己的类,请不要尝试使用
pygal.MyGauge
引用它。使用pygal.
前缀用于引用pygal
库中的内容。但是您的MyGauge
类不是该库的一部分;是你自己创造的。只需使用MyGauge(…)
实例化您的类
另外,为什么要创建
MyGauge
类?它没有任何作用。为什么不直接实例化MyGraph
?如果您在自己的文件中创建了自己的类,请不要尝试使用pygal.MyGauge
引用它。使用pygal.
前缀用于引用pygal
库中的内容。但是您的MyGauge
类不是该库的一部分;是你自己创造的。只需使用MyGauge(…)
实例化您的类
另外,为什么要创建
MyGauge
类?它没有任何作用。为什么不直接实例化MyGraph
?既然pygal的Gauge类继承自他们的Graph类,我认为MyGauge必须继承自MyGraph,以便MyGauge图表将基于MyGraph,不是吗?@Mr.Gaga:问题是你想要MyGauge
做什么MyGraph
还没有做。按照您现在的方式,MyGauge
没有提供自己的功能;它只是MyGraph
的多余包装。大概在pygal
中,Gauge
类向Graph
类添加了一些内容,这就是为什么有两个类。但是,如果您只需要进行一个类的定制,那么就不需要创建两个类。类的名称没有任何意义;重要的是类中的代码。@Mr.Gaga:我不知道,因为我不熟悉pygal
,我也不知道你想做什么。如果我的建议修复了错误,那么你应该继续开发你的类,直到它达到你想要的效果为止,不管是什么。@Mr.Gaga:就像我说的,就在你的pygal.MyGauge(human\u readable=True,pretty\u print=True)
,将它改为MyGauge(human\u readable=True,pretty\u print=True)
@Mr.Gaga:好的,但无论如何,这是一个进步,因为至少你得到了一个与你如何定义你的类有关的错误。也许是时候就该错误再问一个问题了。humanu\u可读的pygal.Graph
已经接受并知道的东西吗?如果没有,则需要在类中定义它。在尝试从现有库扩展类之前,我建议您尝试一些简单的练习,只创建几个相互继承的类,以了解如何在Python中进行类继承。由于pygal的Gauge类继承自其Graph类,我认为MyGauge必须继承MyGraph,以便MyGauge图表将基于MyGraph,不是吗?@Mr.Gaga:问题是你想要什么MyGauge
来做到这一点MyGraph
还没有做到。按照您现在的方式,MyGauge
没有提供自己的功能;它只是MyGraph
的多余包装。大概在pygal
中,Gauge
类向Graph
类添加了一些内容,这就是为什么有两个类。但是,如果您只需要进行一个类的定制,那么就不需要创建两个类。类的名称没有任何意义;重要的是类中的代码。@Mr.Gaga:我不知道,因为我不熟悉pygal
,我也不知道你想做什么。如果我的建议修复了错误,那么你应该继续开发你的类,直到它达到你想要的效果为止,不管是什么。@Mr.Gaga:就像我说的,就在你的pygal.MyGauge(human\u readable=True,pretty\u print=True)
,将它改为MyGauge(human\u readable=True,pretty\u print=True)
@Mr.Gaga:好的,但无论如何,这是一个进步,因为至少你得到了一个与你如何定义你的类有关的错误。也许是时候就该错误再问一个问题了。humanu\u可读的pygal.Graph
已经接受并知道的东西吗?如果没有,则需要在类中定义它。我建议您在尝试从现有库扩展类之前,尝试一些简单的练习,只创建几个相互继承的类,以了解如何在Python中执行类继承。
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)