Python 2.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)
。不工作:
类型错误:long() 最多需要 2 个参数(给定 3 个)
构造上参数的数量/类型的所有不同组合都不起作用。
PS:我这样做是为了引用它会返回值,所以我可以这样使用它:
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__
与上面相同。
如上所述,施工现在按预期工作。