从复杂对象覆盖__init__

时间:2015-12-12 21:45:13

标签: python inheritance

我希望有一个自定义"1 2"类,可以将字符串作为输入(real)并从那里读取imagclass myComplex(complex): def __init__(self, inp): real, imag = inp.split() self.real = float(real) self.imag = float(imag) comp = myComplex("1 2") print comp # (1+2j) 部分。

Traceback (most recent call last):
  File "my_complex.py", line 8, in <module>
    comp1 = myComplex(inp1)
ValueError: complex() arg is a malformed string

但是我收到了错误:

__init__

这是否意味着我的complex没有覆盖html, body { overflow-x: hidden } 中的那个,或者我错过了一些基本的东西?

1 个答案:

答案 0 :(得分:4)

Python complex__new__中分配realimag的值。

__new____init__之前运行,负责创建对象。执行(考虑myComplexcomplex)如下所示:

  1. myComplex("1 1")

  2. myComplex.__new__(cls, inp)

  3. complex.__new__(cls, real, imag)

  4. myComplex.__init__(self, inp)

  5. complex.__init__没有myComplex.__init__没有"1 2"

    这意味着在__init__运行之前解析参数__new__

    你应该覆盖class myComplex(complex): def __new__(cls, inp): real, imag = inp.split() return super(myComplex, cls).__new__(cls, float(real), float(imag))

    luaL_ref