__new__问题
来源:7-1 如何派生内置不可变类型并修改实例化行为

小龙骑士
2017-06-25
>>> class A(object): def __init__(self, *args, **kwargs): print('init') print(self) print(args) print(kwargs) def __new__(cls,*args, **kwargs): print('new') print(cls) print(args) print(kwargs) return object.__new__(cls,*args, **kwargs) >>> a = A('123',b='asdf') new <class '__main__.A'> ('123',) {'b': 'asdf'} Traceback (most recent call last): File "<pyshell#27>", line 1, in <module> a = A('123',b='asdf') File "<pyshell#26>", line 12, in __new__ return object.__new__(cls,*args, **kwargs) TypeError: object() takes no parameters
请问老师这里运行到return为什么会报错啊,我该怎么改呢?
写回答
1回答
-
小龙骑士
提问者
2017-06-26
经过一番搜索查询,终于搞清问题原因,因为我继承的是object类,所以在实例化行为的时候不能在 __new__方法返回的时候带入参数。将代码改成如下的:
class A(object): def __init__(self, *args, **kwargs): print('init') print(self) print(args) print(kwargs) def __new__(cls,*args, **kwargs): print('new') print(cls) print(args) print(kwargs) return object.__new__(cls) a = A('123', b = 'abc')
python3的环境!遇到相同问题的同学,可以参照试一下
10
相似问题