在Python中,“class name(object):”和“class name():”之间有什么区别?

时间:2012-09-14 15:27:54

标签: python object

以下两个类有什么区别?你有关于这个案子的一些相关信息吗?非常感谢你。

class test(object):
  def __init__(self, name):
     print name

class test():
  def __init__(self, name):
     print name

3 个答案:

答案 0 :(得分:4)

在python 2.x中,继承自object的类将是一个新式类,而另一个则不会,而在python 3.x中将同时存在新式。< / p>

但是,新旧之间的差异相当高级(例如,属性搜索顺序),因此初学者不应过于关注不兼容性。

如果您感兴趣,请参阅this答案以获取更多信息,但对于图书馆开发人员来说,这是相当的事情。

答案 1 :(得分:4)

嗯...这个维基页面非常具有说明性地解释了这些差异:http://wiki.python.org/moin/NewClassVsClassicClass

我看到一些回复的信息,旧的(经典的)-Style和New-Style类在py3中是相同的 - &gt;这不正确:

  

enter image description here 在Python 3中删除旧样式 ,只留下新式类的语义

除此之外,自Python 2.2以来, New-Style类已经完全可用了。最多2.1我们必须使用经典样式-> see here

有关差异/信息的简短摘要可能是:

  • 自Python 2.2以来可以使用新样式类
  • 新样式类可以使用描述符 - 旧样式类不能
  • 新样式类可以子类化大多数内置类型 - 旧样式类不能
  • 新的样式类支持新的元模型(例如,它会大量影响type()内置的行为)
  • Old-Style类在查看层次结构之前会在实例上找到一个属性 - 如果类似于可写描述符,则New-Style类将允许类定义获胜
  • 旧式类已在Python 3中删除

但是在大​​多数情况下,新的类的引入在python的 Descriptors --> read more here的组合中受到影响。

答案 2 :(得分:-3)

在这种情况下,没有,因为第一个显式地从对象继承为基类,而第二个隐式地从对象继承。