Python中的'object'类型和继承
在Python中,我可以用以下几种方式定义一个类'foo':
class foo:
pass
或者
class foo(object):
pass
这两种方式有什么区别呢?我试着用一个叫做issubclass(foo, object)的函数来检查这两种类定义是否都返回True,但结果并不是这样。
IDLE 2.6.3 >>> class foo: pass >>> issubclass(foo, object) False >>> class foo(object): pass >>> issubclass(foo, object) True
谢谢。
3 个回答
2
第一个创建了一个“旧式”的类,这种类在Python 3中已经被淘汰并移除了。在Python 2.x中也不应该使用这种类。想了解更多,可以查看Python数据模型的文档。
2
旧式和新式对象... 它们在某些方面的表现有点不同,比如在构造函数的使用上,或者在多重继承时方法的查找顺序上。
9
从 object
继承会让一个类变成“新式类”。关于旧式类和新式类的讨论可以在这里找到:Python 中旧式类和新式类有什么区别?
正如 @CrazyJugglerDrummer 在下面评论的那样,在 Python 3 中,所有的类都是“新式类”。在 Python 3 中,下面这两种声明是完全一样的:
class A(object):
pass
class A:
pass