Python中的'object'类型和继承

4 投票
3 回答
4385 浏览
提问于 2025-04-15 14:56

在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

撰写回答