python对我的构造函数参数做了什么?

python对我的构造函数参数做了什么?,python,inheritance,constructor,python-3.x,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

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

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

啊。明白了

  • 在对超类的
    \uuuuu init\uuuu
    调用中缺少
    self
  • 1.000“额外价值”是来自。。。转换为浮点型

所以超类构造函数调用“破坏”了调用模型,需要显式的自引用,嗯?

我想如果我使用了self,调试会更容易。在我进行检查并提出错误之前,它不会破坏调用模型。Python方法在对实例调用时将实例作为第一个参数。但是由于您是从类调用的,因此必须显式地传递实例。如果你觉得这很奇怪,你可以用“super”来代替。。。