因此,我定义了下面的类,它应该类似于probability mass function。但是,它的逻辑似乎被破坏了,每当我尝试初始化一个新对象时,它都会引发SUM_ERROR
。你知道吗
class ProbabilityMass(dict):
class InvalidEntries(Exception):
pass
SUM_ERROR = InvalidEntries("all values must add upto '1'")
VAL_ERROR = InvalidEntries("negative values are not allowed")
def __init__(self, pm):
dict.__init__(pm)
# Input requirements
if not self.sumsUptoOne():
raise ProbabilityMass.SUM_ERROR
if not self.isNonnegative():
raise ProbabilityMass.VAL_ERROR
def isNonnegative(self):
return all(d < 0 for d in self.values())
def sumsUptoOne(self):
return sum(self.values()) == 1
我怎样才能解决这个问题?你知道吗
通常,调用
dict.__init__()
是因为使用了dict()
。当像函数一样调用一个类时,会创建一个实例,并使用给定给该类的参数调用实例的.__init__()
方法。嗯,调用实例方法和调用以实例作为第一个参数的类方法是一样的。因此,x = dict()
是:如果已经有一个未初始化的
dict
(或子类)实例,可以自己调用__init__()
。但是,您必须记住将实例作为第一个参数传递:更常见的方法是使用内置的
super()
:调用
dict.__init__()
不会初始化类。对super
的正确调用应该如下所示:顺便说一下,您的
isNonnegative()
方法也不正确。更改为:相关问题 更多 >
编程相关推荐