为什么列表对象不属于某个类?

时间:2011-03-19 12:56:45

标签: python

来自classes tutorial

  

在Python中,术语方法不是   对于类实例是唯一的:其他   对象类型也可以有方法。   例如,列表对象具有方法   叫追加,插入,删除,排序,   等等。

我能找到的一个含义是错误:[].foo = 'bar'。还有其他影响吗?为什么没有列出作为一个类实现?这是因为历史原因吗?

5 个答案:

答案 0 :(得分:2)

列表是作为一个类实现的:

>>> [].__class__
<type 'list'>

只是你无法为它们分配任意属性。这同样适用于其他类型,例如字符串。

>>> "foo".bar = "something"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'bar' 

答案 1 :(得分:2)

有些人可能会给你更好的解释,但我认为这是基础知识。

有一个time(前Python 2.2.3),其中[用户定义]类和类型并不完全相同。 Python总是有基本的内置类型,如int s,float s,list s,tuple s,dict s等。当你打电话时type([]),您得到type,但不是class。 Python内置类型不允许其对象具有附加其继承的属性。但是在Python版本中检查这个新式的类&gt; 2.3:

>>> class C(object):
>>>     pass

>>> type(C())
<class '__main__.C'>

>>> type([])
<type 'list'>

我认为这就是教程所指的“术语方法不是类实例独有的:其他对象类型也可以有方法”。

有关typeobject现在如何统一的详细说明,请检查this链接。

答案 2 :(得分:0)

列表对象 IS 属于(或是其实例)内置类型/类'列表'

例如:

>>> list1 = []
>>> print type(list1)
<type 'list'> 

答案 3 :(得分:0)

许多内置类型(list,str,tuple,dict)类(及其对象的实例),但为了提高运行时效率,它们不像类那样灵活你可以用纯Python写。语言实现折衷了在(例如)列表对象上设置任意属性以提高整体性能的能力。

答案 4 :(得分:0)

尽管是一个python newb,我会尝试自己回答这个问题。我在这里得到了一些很好的答案,但没有一个解释为什么不列出属于某个类的对象。

我认为没有“好”的理由,这只是遗产。它们最初是在Python上课之前实现的,并且还没有进行改装。