__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的环境!遇到相同问题的同学,可以参照试一下

1
0

Python高效编程技巧实战

精选50个Python案例,源自实战,全面提升Python编程能力

2582 学习 · 360 问题

查看课程