10 python overriding class-design
在Python中,我试图扩展内置'int'类型.这样做我想将一些keywoard参数传递给构造函数,所以我这样做:
class C(int):
     def __init__(self, val, **kwargs):
         super(C, self).__init__(val)
         # Do something with kwargs here...
虽然调用C(3)工作正常,但C(3, a=4)给出:
'a' is an invalid keyword argument for this function` 
并C.__mro__返回预期的:
(<class '__main__.C'>, <type 'int'>, <type 'object'>)
但似乎Python试图先打电话int.__init__......任何人都知道为什么?这是解释器中的错误吗?
Python数据模型的文档建议使用__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
| 归档时间: | 
 | 
| 查看次数: | 1819 次 | 
| 最近记录: |