2017-07-18 24 views
2

我想知道是否有可能将jupyter类拆分成不同的单元格?比方说:Jupyter - 多个单元格中的拆分类


#first cell: 
class foo(object): 
    def __init__(self, var): 
     self.var = var 

#second cell 
    def print_var(self): 
     print(self.var) 

对于更复杂的类其真烦人,并写入到一个单元格。 我想把每个方法放在不同的单元格中。

去年有人制作this但我不知道是否有内置的东西,所以我不需要外部脚本/进口。

如果没有,我想知道是否有理由不给机会分裂你的代码和文档/调试它的方式更容易。

在此先感谢

+0

从你给了同样的链接:https://github.com/jupyter/notebook/issues/ 1243 – Goyo

回答

3

我不觉得这样整个东西是一个问题或一个好主意......但也许下面就为你工作:


# First cell 
class Foo(object): 
    pass 

# Other cell 
def __init__(self, var): 
    self.var = var 

Foo.__init__ = __init__ 

# Yet another cell 
def print_var(self): 
    print(self.var) 
Foo.print_var = print_var 

我不指望它非常健壮,但是......它应该适用于普通班级。

编辑:我相信有几种情况可能会破坏。我不确定这是否会抵制代码检查,因为这种方法与班级“远远地”相距甚远。但是你使用的是笔记本,所以代码检查不应该成为一个问题(?),尽管在调试的时候记住这一点。

另一个可能的问题可能与使用元类有关。如果您尝试使用可能会破坏它的元类(或派生自某个使用元类的类),因为元类通常希望能够知道类的所有方法,并且通过动态地将方法添加到类中,我们正在弯曲关于课堂创作流程的规则。

没有元类或一些“非常奇怪”的用例,这种方法应该是安全的。

对于“简单”类,它是一个非常有效的方法。但...它不完全是预期的功能,所以(ab)使用它可能会给我一些额外的问题,我可能不会

+0

感谢您的回答。对我来说,它似乎工作。你能解释为什么它不是很健壮吗? –

+0

谢谢,我认为我的目的它会好起来的。另一方面,将细胞结合起来很容易,并且在开发过程中仅将其用于清晰。 –

0

没有办法拆分一个类, 但是,您可以动态地将方法添加到它的一个实例

CELL#1

import types 
class A: 
    def __init__(self, var): 
     self.var = var 

a = A() 

而在不同的小区:

CELL#2

def print_var(self): 
    print (self.var) 
a.print_var = types.MethodType(print_var, a) 

现在,这应该工作:

CELL#3

a.print_var() 
相关问题