Python 当我使用list.extend调用extend方法时,为什么extend方法不起作用?

Python 当我使用list.extend调用extend方法时,为什么extend方法不起作用?,python,Python,当我在python中使用list.extend(list\u对象)调用list的extend方法时,我得到一个错误。为什么会这样?我没有声明list类的对象,而是使用list.extend直接调用extend。下面是我编写的代码 l=list() l2=[1,2,3,4] print(list.extend(l2))# throws an error.I was under the impression that this is same as the below statement print

当我在python中使用list.extend(list\u对象)调用list的extend方法时,我得到一个错误。为什么会这样?我没有声明list类的对象,而是使用list.extend直接调用extend。下面是我编写的代码

l=list()
l2=[1,2,3,4]
print(list.extend(l2))# throws an error.I was under the impression that this is same as the below statement
print(l.extend(l2)) #doesnt throw an error
而且


为什么会这样?

这两种情况并不相同

在第一种情况下,通过类调用内置类的方法(可调用属性),然后通过该类的实例调用该方法。在第二种情况下,您将通过实例然后通过类访问类的不可调用属性。方法是可调用的,为了调用它们,您需要尊重方法的签名,这与第二种情况不同

要通过list类本身使用
extend
,您需要传递一个list实例作为第一个参数,因为Python中的普通方法通常需要一个实例作为第一个参数:

list.extend(l, l2) # extends l with l2

请注意,当您通过
l.extend(l2)

中的实例调用extend时,该实例是隐式传递的,您可以在类上调用它并传递两个对象
list.extend(l,l2)
,或者在一个对象上调用它并传递另一个对象
l.extend(l2)
。您应该了解类是如何工作的。另外,在第二个示例中,
a
是类属性<代码>扩展是一个实例属性,恰好是一个函数。您可以在列表对象上调用它,而不是在类上调用它(您可以,但这不是您通常所做的)。
print(list.extend(l2)
应该是
print l.extend(l2)
list.extend(l, l2) # extends l with l2