したがって、probability mass functionのような次のクラスを定義しました。しかし、そのロジックが壊れていると私は新しいオブジェクトを初期化しようとするたびにSUM_ERROR
を上げるでしょう。`__init __()`は常にエラーを発生させます
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
どうすればこの問題を解決できますか?
Canonicalの構文:
より一般的な方法は、組み込みの
super()
を使用することです。 'q = ProbabilityMass({...})' –'print(sum(self.values()))'です。私の推測では、浮動小数点の問題があり、その合計が1に非常に近いことだけを要求する必要があるということです。 –
あなたのコードを使用して初期化するときにdictを与えると、 'self.values()'は空のリストです。 'self.keys()'と同じです –