类声明有什么继承自的理由object吗?
object
我刚刚找到了一些执行此操作的代码,但我找不到很好的理由。
class MyClass(object): # class code follows...
在 Python 3 中,除了 Python 2 和 3 的兼容性之外,没有理由. 在 Python 2 中,有很多原因。
在 Python 2.x(从 2.2 开始)中,有两种样式的类取决于object作为基类的存在与否:
```py
class ClassicSpam: # no base class … pass ClassicSpam.bases () ```
class NewSpam(object): # directly inherit from object … pass NewSpam.bases (,) class IntSpam(int): # indirectly inherit from object… … pass IntSpam.bases (,) IntSpam.bases[0].bases # … because int inherits from object (,) ```
毫无疑问,在编写课程时,您总是想上新式课程。这样做的好处很多,列出其中一些:
classmethod
staticmethod
self
property
__slots__
__new__
super
super()
如果您不继承 from object,请忘记这些。可以在此处找到对前面的要点以及“新”样式类的其他好处的更详尽的描述。
新型类的缺点之一是类本身对内存的要求更高。但是,除非您要创建许多类对象,否则我怀疑这将是一个问题,并且它是在积极海洋中的消极沉没。
在 Python 3 中,事情被简化了。只有新样式的类存在(简单地称为类),因此,添加的唯一区别object是要求您再输入 8 个字符。这:
class ClassicSpam: pass
与此完全等效(除了他们的名字:-):
class NewSpam(object): pass
对此:
class Spam(): pass
都object在他们的__bases__.
__bases__
>>> [object in cls.__bases__ for cls in {Spam, NewSpam, ClassicSpam}] [True, True, True]
在 Python 2 中:总是从 显式继承object。获得福利。
在 Python 3 中:如果您正在编写尝试与 Python 无关的代码,则继承自object,也就是说,它需要在 Python 2 和 Python 3 中都可以工作。否则不要,因为 Python 会为您插入它,所以它真的没有区别在幕后。