2017-07-18 23 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() 
相關問題