听起来好像真的很简单,但是我不太理解jupyter笔记本中继承是如何应用的。
我创建了以下类作为ipywidgets.HTML的子类。我已经测试过它可以满足我的要求,出于这个问题的目的,它到底在做什么无关紧要
class Icon(ipywidgets.HTML):
"""font-awesome icon widget by intercepting ipywidgets.HTML.value"""
def __init__(self, icon, *args, cat='fa', style='', **kwargs):
super().__init__(*args, **kwargs)
self.icon = icon
self.css_style = style
if not self.css_style.strip().endswith(';'):
self.css_style += ';'
self.cat = cat
self.value = self.html()
def html(self, style=''):
html = '<i class="{} fa-{}" style="{}"></i>'
styled_icon = html.format(self.cat, self.icon, self.css_style + style)
return styled_icon
当我在Jupyter笔记本中定义此类时,然后在另一个单元格中实例化它,例如:
icon = Icon('square')
icon
HTML小部件按预期显示。
但是,当我将此类定义放入customwidgets.py
中并使用from customwidgets import *
时,与上面完全相同的jupyter单元格将给出以下输出消息:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-96-176522f37eb8> in <module>()
----> 1 icon = Icon('square')
~/path/to/customwidgets.py in __init__(self, icon, cat, style, *args, **kwargs)
13 """font-awesome icon widget by intercepting ipywidgets.HTML.value"""
14 def __init__(self, icon, *args, cat='fa', style='', **kwargs):
---> 15 super().__init__(*args, **kwargs)
16 self.icon = icon
17 self.css_style = style
TypeError: super(type, obj): obj must be an instance or subtype of type
为什么一种情况下的行为与另一种情况不同?