use*_*602 5 oop python-3.x jupyter jupyter-notebook
给出以下代码:
class DTC:
def __init__(self):
self.__root = None
def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
def ent(self,Y):
freq = self.__count_unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
entropy_ += (-p)*math.log2(p)
return ent_
Run Code Online (Sandbox Code Playgroud)
如果将其放置在 Jupyter Notebook 的单个单元格中,则上面的代码将会运行。但是,如果我希望将类代码拆分为多个单元格,如下所示,如何才能使类代码工作:
细胞1
class DTC:
def __init__(self):
self.__root = None
Run Code Online (Sandbox Code Playgroud)
细胞2
def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
Run Code Online (Sandbox Code Playgroud)
细胞 3
def ent(self,Y):
freq = self.__unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
ent_ += (-p)*math.log2(p)
return ent_
Run Code Online (Sandbox Code Playgroud)
在 Jupyter Notebooks 中,有两种方法可以将类定义拆分为多个单元格
以天真的方式做到这一点(利用继承和覆盖):
细胞1
class DTC:
def __init__(self):
self.__root = None
Run Code Online (Sandbox Code Playgroud)
细胞2
class DTC(DTC):
def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
Run Code Online (Sandbox Code Playgroud)
细胞3
class DTC(DTC):
def ent(self,Y):
freq = self.__count_unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
entropy_ += (-p)*math.log2(p)
return ent_
Run Code Online (Sandbox Code Playgroud)
需要注意的是,这实际上在内部创建了类的层次结构:
import inspect
inspect.getmro(DTC)
# outputs: (__main__.DTC, __main__.DTC, __main__.DTC, object)
Run Code Online (Sandbox Code Playgroud)
如果您不打算拉伸太多单元格,则可以使用此方法。
细胞1
import jdc # jupyter dynamic classes
class DTC:
def __init__(self):
self.__root = None
Run Code Online (Sandbox Code Playgroud)
细胞2
%%add_to DTC
def unique(self,Y):
d = {}
for i in Y:
if i not in d:
d[i]=1
else:
d[i]+=1
return d
Run Code Online (Sandbox Code Playgroud)
细胞 3
%%add_to DTC
def ent(self,Y):
freq = self.__count_unique(Y)
ent_ = 0
total = len(Y)
for i in freq:
p = freq[i]/total
entropy_ += (-p)*math.log2(p)
return ent_
Run Code Online (Sandbox Code Playgroud)
这次没有形成层次结构:
import inspect
inspect.getmro(DTC)
#output: (__main__.DTC, object)
Run Code Online (Sandbox Code Playgroud)