从字符串继承时,传递给argument
的值被打印出来:
class StringChild(str):
def __init__(self, argument):
self.argument = argument
print(Child("text"))
输出:
text
从int继承时也是这样:
class IntChild(int):
def __init__(self, argument):
self.argument = argument
print(IntChild(10))
输出:
10
但是,当我从列表或dict继承时,我分别得到一个空列表或dict:
class ListChild(list):
def __init__(self, argument):
self.argument = argument
print(ListChild([1,2,3]))
输出:
[]
为什么会有不同的行为
初始化
self.argument = argument
并不是真正初始化对象本身(列表),它只是设置一个名为argument
的任意属性如果您使用的是一个相当不错的IDE,那么应该会看到一个警告,上面写着
Call to __init__ of super class is missing
如果您这样做,您将得到您的列表:
你甚至不需要
self.argument
现在,在子类化
int
时也会看到同样的警告。int
和list
之间的区别在于int
是原始的,工作原理有点不同。你甚至不需要把argument
传给super().__init__
。但是,您需要将其传递给IntChild.__init__
:有关
int
工作原理的更多详细信息,请参见this question鼓励用户将^{} 和^{} 子类化,而不是直接将
list
和str
子类化,但是没有UserInt
相关问题 更多 >
编程相关推荐