以对象作为参数初始化

2024-05-15 00:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一些python代码转换成scala代码。所以我完全不懂Python。

但为什么有些类将对象作为参数,但从不显式地使用它呢?首先把它作为参数的理由是什么?

示例:

class Table(object)

谢谢你抽出时间。


Tags: 对象代码示例参数object时间tableclass
3条回答

在Python2中,它声明Tablenew-style class(与“经典”类相反)。 在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__']

另外,propertiessuper也不能用于经典类。

在Python2中,最好让所有类都成为新样式的类。(尽管标准库中的许多类仍然是经典类,但为了向后兼容。)

一般来说,在一个声明中

class Foo(Base1, Base2):

Foo被声明为继承自基类Base1Base2的类。

object是Python中所有类的母类。它是一个新样式的类,因此从object继承会使Table成为一个新样式的类。

Table类正在扩展名为object的类。这不是争论。可能需要显式扩展object的原因是它将类转换为新样式的类。如果在Python 3之前没有显式指定它扩展object,那么它将默认为一个旧样式类。(自从Python 3以来,所有类都是新样式的,不管您是否显式地扩展了object。)

有关新样式和旧样式类的详细信息,请see this question

只需注意,“new-style”与“old-style”类的区别是特定于Python 2.x的;在3.x中,所有类都是“new-style”。

相关问题 更多 >

    热门问题