在Python中,我试图扩展内置的“int”类型。这样做时,我想将一些关键字参数传递给构造函数,所以我这样做:
class C(int):
def __init__(self, val, **kwargs):
super(C, self).__init__(val)
# Do something with kwargs here...
然而在打电话时C(3)
工作正常,C(3, a=4)
gives:
'a' is an invalid keyword argument for this function`
and C.__mro__
返回预期:
(<class '__main__.C'>, <type 'int'>, <type 'object'>)
但Python似乎正在尝试调用int.__init__
首先...有人知道为什么吗?这是解释器中的错误吗?
Python 数据模型的文档建议使用__new__
:
object.new(cls[ ...]) http://docs.python.org/reference/datamodel.html#object.__new__
new() 主要旨在允许不可变类型(如 int、str 或 tuple)的子类自定义实例创建。它通常在自定义元类中被重写,以便自定义类创建。
对于您给出的示例,应该执行类似的操作:
class C(int):
def __new__(cls, val, **kwargs):
inst = super(C, cls).__new__(cls, val)
inst.a = kwargs.get('a', 0)
return inst
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)