在jupyter中继承处理是否有所不同?

时间:2018-08-05 15:37:10

标签: python inheritance jupyter-notebook

听起来好像真的很简单,但是我不太理解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

为什么一种情况下的行为与另一种情况不同?

0 个答案:

没有答案