一个__new__有关的问题
class Test(list):def __new__(cls,*x):
print(x)
return list.__new__(cls,x)
def __init__(self,*x):
self.L=self
>>> a=Test('a','b','c')
('a', 'b', 'c')
>>> a
[]
>>> a.L
[]
请问这里返回的为什么是个空值? list是在初始化的时候添加值,而不是实例化时。
所以要这样写:
class Test(list):
def __new__(cls,*x):
print(x)
return list.__new__(cls,x)
def __init__(self,*x):
super().__init__(x)
self.L=self
a=Test('a','b','c')
print(a)
print(a.L)
其实这里__new__方法是没必要重写的,一般实际运用也很少重写__new__方法。可以改成下面这样:
class Test(list):
def __init__(self,*x):
super().__init__(x)
self.L=self
a=Test('a','b','c')
print(a)
print(a.L)
本帖最后由 fc5igm 于 2021-6-15 17:42 编辑
hrpzcf 发表于 2021-6-15 17:13
list是在初始化的时候添加值,而不是实例化时。
所以要这样写:
谢谢。
请问这里的new没必要写是因为
list是在初始化的时候添加值,而不是实例化时。
这个原因么?
另外请问对此的确定,除了两个都试试,还有什么别的办法么? fc5igm 发表于 2021-6-15 17:36
谢谢。
请问这里的new没必要写是因为
对,类实例化时先调用new方法返回实例,接着调用init方法初始化。
一般不可变数据类型(比如str)的初始值是实例化时就确定了,可变数据类型(比如list)实例化是只是返回一个空实例,初始化时才将初始值添加到实例内,不过这是我个人的理解,也没严格验证过。{:10_245:} hrpzcf 发表于 2021-6-15 18:08
对,类实例化时先调用new方法返回实例,接着调用init方法初始化。
一般不可变数据类型(比如str)的初 ...
十分感谢
页:
[1]