在Python中,与;类名(对象):“;及;类名();

在Python中,与;类名(对象):“;及;类名();,python,object,Python,Object,下面两个类之间的区别是什么?你有关于这个案子的相关信息吗?多谢各位 class test(object): def __init__(self, name): print name class test(): def __init__(self, name): print name 在本例中,无,因为第一个显式继承自对象作为基类,而第二个隐式继承自对象 在Python2.x中,从对象继承的类将是一个新样式的类,而另一个不会,而在Python3.x中,两者都将是新样

下面两个类之间的区别是什么?你有关于这个案子的相关信息吗?多谢各位

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

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

在本例中,无,因为第一个显式继承自对象作为基类,而第二个隐式继承自对象

在Python2.x中,从
对象
继承的类将是一个新样式的类,而另一个不会,而在Python3.x中,两者都将是新样式的类

然而,新的和旧的之间的差异是相当先进的(例如,属性搜索顺序),所以初学者不应该太担心不兼容


如果您感兴趣,请参阅答案以了解更多信息,但这对库开发人员来说是一件非常重要的事情。。。此wiki页面非常直观地解释了这些差异:

我看到了一些信息的答案,在py3中旧的(经典的)样式和新样式的类是相同的->这是不正确的:

在Python3中删除了旧式类,只保留了新式类的语义

除此之外,自Python 2.2以来,新样式类非常可用。直到2.1,我们不得不使用经典风格

关于差异/信息的简短总结可以是:

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

但是在大多数情况下,新样式类的引入在python的描述符的组合中受到了影响,这是有区别的。检查
test.\uuuuMRO\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。第二个类抛出一个
AttributeError
。事实上,
()
的可能副本是不必要的。