0

わかりました、そのようなコードは間違っていないと思っていましたが、明らかにそうです:

somewhere:
    # p is a float value between 0 and 1
    m.limit=PidRange(p-1.0, p+1.0)

class PidRange(Range):
    def __init__(self, low, up):
        Range.__init__(low,up,...)
        pass
    # some methods definition for the PidRange sub-class

class Range(object):
    def __init__(self, p_min=None, p_max=None, ...):
        if (p_min > p_max):
             raise ValueError("Range can't be created: the low bound %f exceeds high bound %f."%(p_min,p_max))

いくつかのクラス階層で [min,max] 範囲を初期化しようとしています。しかし、まったく奇妙な理由で、p=0.888337 は次の例外を発生させます。

    File "src/__main__.py", line 155, in __find_data
        m.limit=PidRange(p-1.0, p+1.0)
    File "src/routing.py", line 32, in __init__
       Range.__init__(low, up, low!=None, up!=None)
    File "src/equation.py", line 30, in __init__
       raise ValueError("Range can't be created: the low bound %f exceeds high bound %f."%(p_min,p_max))
    ValueError: Range can't be created: the low bound 1.888337 exceeds high bound 1.000000.

何が起こっているかについて何か手がかりはありますか?Python 言語の習得にはほど遠いことを認めざるを得ませんが、このような奇妙な動作を説明できる微妙な点は見当たりません。

4

1 に答える 1

2

ああ。考え出した。

  • selfスーパークラスへの__init__呼び出しがありません
  • 1.000 'extra value' は True です ... トランス型からフロートへ

そのため、スーパークラス コンストラクターの呼び出しは呼び出しモデルを「壊し」、明示的な自己参照を必要としますね。

于 2012-05-10T15:14:41.710 に答える