Python:为 __init__ 扩展 int 和 MRO

2023-12-28

在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(使用前将#替换为@)

Python:为 __init__ 扩展 int 和 MRO 的相关文章

随机推荐