以Object为参数的类


114

我正在尝试将一些python代码转换为scala代码。所以我对Python完全陌生。

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

例:

class Table(object)

感谢您的时间。


Answers:


112

在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__']

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

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

通常,在诸如

class Foo(Base1, Base2):

Foo被声明为从基类Base1和继承的类Base2

object是Python所有类的母亲。它是一种新型的类,从这么继承object品牌Table新风格的类。


您能否将我重定向到提及对象的源,而该源在Python3中不需要作为参数?我似乎找不到它。谢谢
2017年

1
在StackOverflow上已经提到过很多次了(例如在这里),但是我一直未能在文档中找到对此的简单声明。在本教程中隐式显示(通过省略object类库列表)。
unutbu

1
Python3文档还指出了“新式类”是“为类的风味老字号现在用于所有的类对象(我的重点)”。而且Python2 docs声明 “新样式类”是继承自的任何类object。这两个语句放在一起意味着您不需要object在Python3中的类库列表中包含它们,因为所有类都是Python3中的新型类。
unutbu

21

Table课程扩展了名为的课程object。这不是争论。您可能要object显式扩展的原因是,它将类变成了新样式。如果您未明确指定它扩展object,直到Python 3,它将默认为旧类。(从Python 3开始,无论您是否显式扩展,所有类都是新样式object。)

有关新式和旧式类的更多信息,请参见此问题


1
这是更直接和简洁的答案。谢谢。
Sabuncu 2014年

3

请注意,“新样式”与“旧样式”类的区别特定于Python 2.x;在3.x中,所有类都是“新样式”。


2

对于Python,类Table和类Table(object)相同。

它不是参数,而是从对象(与许多其他语言一样为基类)扩展的。

它只说它继承了“对象”中定义的任何内容。这是默认行为。


3
自动扩展的类object仅是Python 3中的默认行为。在python 2中,类扩展对象具有不扩展对象的类将不具有的属性。
Lewis Ellis

1

object是python中定义的类对象的最基本类型。对象的属性如下所示

** >>>目录(对象)

[' class ',' delattr ',' doc ',' format ',' getattribute ',' hash ',' init ',' new ',' reduce ',' reduce_ex ',' repr ',' setattr ',' sizeof ',' str ',' subclasshook '] **

所以Table(object)只是继承。


0

1)类名(对象):2)类名:它们都是相同的,但第一个类在编写方面相当好,在继承其他类到另一个类时看起来更好,看起来很同质。

一样吗?因此,Python中的所有事物都属于对象,这意味着Python中的所有事物都具有对象的属性,无论是否写入,它都会理解它。首先,我们明确地告诉第二个我们没有。


在Python 2中不是这种情况,有关详细信息,请参见可接受的答案。
niemmi '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.