python - 对象声明在 python 类中意味着什么,我应该使用它吗?

标签 python oop inheritance

<分区>

示例#1:

class Person(object):
    pass

示例#2:

class Person:
    pass

对象声明有什么作用?你应该使用它吗?我有一堆程序,它们都有,但不知道它们有什么不同。如果有人可以解释这个概念,请。

最佳答案

在 Python2 中,将 object 声明为基类会使该类成为 new-style class .否则,它就是一个“经典”类。不同之处在于

  • 属性只适用于新式类

  • 新式类有 mro method

  • 新式类具有许多经典类所缺乏的属性

    In [288]: class Foo: pass
    In [289]: dir(Foo) 
    Out[289]: ['__doc__', '__module__']
    
    In [290]: class Bar(object): pass
    In [291]: dir(Bar) 
    Out[291]:  ['__class__',  '__delattr__',     '__dict__',  '__doc__',  '__format__',  '__getattribute__',     '__hash__',  '__init__',  '__module__',  '__new__',  '__reduce__',     '__reduce_ex__',  '__repr__',  '__setattr__',  '__sizeof__',     '__str__',  '__subclasshook__',  '__weakref__']
    

经典类在 Python2 中保留只是为了向后兼容。您定义的所有自定义类都应该是新样式的。

在Python3中,所有类都是new-style的,所以不需要显式声明。

关于python - 对象声明在 python 类中意味着什么,我应该使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424365/

相关文章:

Python 3 套接字编程 : using sendall vs. sendto

python - 如何对取列表列平均值的 pandas Dataframe 执行 groupby 操作?

python - 使用 Python 从 CSV 中删除不需要的逗号

python - 鸭嘴兽的奇怪问题(从脚本制作 .app 包)

c# - 在需要时从接口(interface)转换为某个具体类是一种好习惯吗?

php - 这是在 PHP mvc 中缓存查询和构建页面的可接受方式吗?

java - OOP任务(类层次结构、继承、接口(interface)等)

c++ - 继承前向声明的结构?

c++ - 通过非虚方法进行多态调用

java - 我可以强制所有继承一个类的 child 继承一个特定的方法吗?