Flo*_*n H 8 python jupyter-notebook
我想知道是否有可能将jupyter类分成不同的单元格?让我们说:
#first cell:
class foo(object):
def __init__(self, var):
self.var = var
Run Code Online (Sandbox Code Playgroud)
#second cell
def print_var(self):
print(self.var)
Run Code Online (Sandbox Code Playgroud)
对于更复杂的类,将它们写入一个单元格真的很烦人.我想将每种方法放在不同的单元格中.
有人在去年做了这个,但我想知道是否有东西内置,所以我不需要外部脚本/导入.
如果没有,我想知道是否有理由不给你机会分割你的代码和文档/调试它更容易.
提前致谢
小智 10
在Github问题"在多个单元格中定义Python类#1243"提供了两个解决方案,可在此处找到:https://github.com/jupyter/notebook/issues/1243
一种解决方案是使用为这种特定情况开发的包中的魔术函数,称为jdc - 或Jupyter动态类.有关如何安装以及如何使用的文档可以在包URL上找到,网址为https://alexhagen.github.io/jdc/
第二个解决方案是由Doug Blank提供的,它只适用于常规Python,而不需要采用如下额外的魔法:
单元格1:
class MyClass():
def method1(self):
print("method1")
Run Code Online (Sandbox Code Playgroud)
单元格2:
class MyClass(MyClass):
def method2(self):
print("method2")
Run Code Online (Sandbox Code Playgroud)
单元格3:
instance = MyClass()
instance.method1()
instance.method2()
Run Code Online (Sandbox Code Playgroud)
我在Jupyter Notebook和VS Code中自己测试了第二个解决方案,它在两个环境中都运行良好,除了我[pylint] E0102:class already defined line 5在VS Code中遇到了一个pylint错误,这是预期的,但仍然运行良好.而且,VS Code无论如何都不是目标环境.
我觉得整个事情都不是一个问题或一个好主意……但以下内容可能对您有用:
# First cell
class Foo(object):
pass
Run Code Online (Sandbox Code Playgroud)
# Other cell
def __init__(self, var):
self.var = var
Foo.__init__ = __init__
Run Code Online (Sandbox Code Playgroud)
# Yet another cell
def print_var(self):
print(self.var)
Foo.print_var = print_var
Run Code Online (Sandbox Code Playgroud)
我不认为它会非常健壮,但是...应该适合常规课程。
编辑:我认为在某些情况下可能会中断。我不确定这种方法是否会抵制代码检查,因为该方法离类很远。但是您使用的是笔记本电脑,因此尽管进行调试时请记住这一点,但代码检查不应成为问题(?)。
另一个可能的问题可能与元类的使用有关。如果您尝试使用可能会破坏它的元类(或从使用元类的某个类派生),因为元类通常希望能够了解该类的所有方法,并通过向类中动态添加方法来实现,类创建流程的规则。
如果没有元类或某些“相当奇怪的”用例,则该方法应该是安全的。
对于“简单”类,这是一种完全有效的方法。但是...这并不是预期的功能,因此(滥用)它可能会带来一些其他问题,而我可能不会
| 归档时间: |
|
| 查看次数: |
3391 次 |
| 最近记录: |