什么是python使用我的构造函数参数?

时间:2012-05-10 15:10:51

标签: python inheritance constructor python-3.x

好吧,我认为这样的代码不会出错,但显然会这样:

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语言,但我没有看到任何可以解释这种奇怪行为的微妙之处。

1 个答案:

答案 0 :(得分:2)

啊。想通了。

  • self调用超类
  • 时错过了__init__
  • 1.000'额外值'是来自...... trans-typed to float的真实

所以超类构造函数调用'打破'调用模型并需要显式的自引用,是吗?