使用Object作为参数的类

myt*_*mer 99 python

我正在尝试将一些python代码翻译为scala代码.所以我是Python中的总菜鸟.

但为什么有些类将对象作为参数但从未明确使用它?首先将它作为参数的原因是什么?

例:

class Table(object)
Run Code Online (Sandbox Code Playgroud)

感谢您的时间.

unu*_*tbu 103

在Python2中,这声明Table是一个新式的类(而不是"经典"类).在Python3中,所有类都是新式类,因此不再需要它们.

新样式类具有经典类缺少的一些特殊属性.

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Run Code Online (Sandbox Code Playgroud)

此外,属性超级不适用于经典类.

在Python2中,最好使所有类成为新式类.(虽然标准库中的很多类仍然是经典类,但为了向后兼容.)

一般来说,在诸如此类的陈述中

class Foo(Base1, Base2):
Run Code Online (Sandbox Code Playgroud)

Foo被声明为类从基类继承Base1Base2.

object是Python中所有类的母亲.它是一个新式的类,所以继承objectTable一个新式的类.

  • 它在 StackOverflow 上被多次提及([此处,例如](/sf/answers/1133550071/)),但我无法在文档中找到对此的简单声明。它是隐式显示的(通过从类基列表中省略“object”)[在教程中](https://docs.python.org/3/tutorial/classes.html#class-definition-syntax)。 (2认同)

ick*_*fay 18

Table类的扩展名为类object.这不是一个论点.您可能希望object显式扩展的原因是它将类转换为新样式类.如果你没有明确指定它扩展object,那么在Python 3之前,它将默认为旧式类.(从Python 3开始,所有类都是新式的,无论是否显式扩展object.)

有关新式和旧式课程的更多信息,请参阅此问题.

  • 这是更直接和简洁的答案。谢谢。 (2认同)