[英]How to properly use super().__init__() in python 3?
我编写了以下代码,这会引发错误。 我想知道我应该修改我的代码以成功执行以及管理其操作的规则,以便我将来可以避免这个问题。
我在这里要做的是定义一个 class,DataLoader,它加载一个语料库,进入训练和测试集,以及完整和测试词汇集。 所有这一切都没有问题。
当我尝试继承 Model class 中的 DataLoader class 时出现问题。 我想使用 DataLoader class 的所有属性以及附加属性 n 来初始化 Model class 的实例。 我不清楚为什么这段代码没有达到这个效果。
from nltk.corpus import brown
class DataLoader():
def __init__(self,data,train_ratio):
self.all = [sent for sent in data.sents()]
num_ex = len(self.all)
num_train = int(train_ratio * num_ex)
self.train = [word.lower() for sent in self.all[:num_train] for word in sent]
self.test = [word.lower() for sent in self.all[num_train:] for word in sent]
self.full_vocab = [word.lower() for word in set(data.words())]
self.train_vocab = list(set(self.train))
return None
class Model(DataLoader):
def __init__(self,data,train_ratio,n):
self.n = n
super().__init__(self,data,train_ratio)
bgrams = Model(data=brown, train_ratio=0.5, n=2)
并引发以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-d641225c06d6> in <module>()
----> 1 bgrams = Model(data=brown,train_ratio=0.5,n=2)
2 # bgrams.compute_bigram()
<ipython-input-15-98b0485bce38> in __init__(self, data, train_ratio, n)
9
10 self.n = n
---> 11 super(Model).__init__(self,data,train_ratio)
12
13
TypeError: super() takes at most 2 arguments (3 given)
很简单,只需从 super 子句中删除 self 即可; 您的代码应如下所示:
class Model(DataLoader):
def __init__(self,data,train_ratio,n):
self.n = n
super().__init__(data,train_ratio)
您必须不传递self
并且按照惯例super
调用是第一个调用,因为它可能会影响下一个初始化语句
class Model(DataLoader):
def __init__(self, data, train_ratio, n):
super().__init__(data, train_ratio)
self.n = n
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.