__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
相似问题