Python class derived from built-in type won't construct: TypeError: type() takes at most X arguments (Y given)
Python class derived from built-in type won't construct: TypeError: type() takes at most X arguments (Y given)
Python2.7, Windows7x64.
代码。请注意 class ImmedVal
派生自内置类型 long
.
class Immediate(object):
def __init__(self, name, value, loc):
object.__init__(self)
self.value = value
self.loc = loc
self.name = name
class ImmedVal(long, Immediate):
def __init__(self, name, value, loc):
long.__init__(self, value)
Immediate.__init__(self, name, value, loc)
但是尝试实例化 ImmedVal...
x = ImmedVal('hello', 33, 7)
...不工作:
TypeError: long() takes at most 2 arguments (3 given)
numbers/types 参数的所有不同组合在构建时均无效。
P.S.: 我这样做是为了引用它 returns 的值,所以我可以这样使用它:
eval('x + 1', { 'x' : x })
内置类型是不可变的。这改变了游戏规则,我需要这样的 __new__
运算符:
class ImmedVal(long, Immediate):
def __new__(cls, name, value, loc):
return long.__new__(cls, value)
def __init__(self, name, value, loc):
long.__init__(self, value)
Immediate.__init__(self, name, value, loc)
(基础class Immediate
和__init__
与上面没有变化。)
如上所述,构造现在按预期工作。
Python2.7, Windows7x64.
代码。请注意 class ImmedVal
派生自内置类型 long
.
class Immediate(object):
def __init__(self, name, value, loc):
object.__init__(self)
self.value = value
self.loc = loc
self.name = name
class ImmedVal(long, Immediate):
def __init__(self, name, value, loc):
long.__init__(self, value)
Immediate.__init__(self, name, value, loc)
但是尝试实例化 ImmedVal...
x = ImmedVal('hello', 33, 7)
...不工作:
TypeError: long() takes at most 2 arguments (3 given)
numbers/types 参数的所有不同组合在构建时均无效。
P.S.: 我这样做是为了引用它 returns 的值,所以我可以这样使用它:
eval('x + 1', { 'x' : x })
内置类型是不可变的。这改变了游戏规则,我需要这样的 __new__
运算符:
class ImmedVal(long, Immediate):
def __new__(cls, name, value, loc):
return long.__new__(cls, value)
def __init__(self, name, value, loc):
long.__init__(self, value)
Immediate.__init__(self, name, value, loc)
(基础class Immediate
和__init__
与上面没有变化。)
如上所述,构造现在按预期工作。