【发布时间】:2017-12-06 14:25:37
【问题描述】:
我正在尝试将一些 python 代码转换为 scala 代码。所以我完全是 Python 的菜鸟。
但是为什么有些类有对象作为参数却从不显式使用呢?首先将其作为参数的原因是什么?
例子:
class Table(object)
感谢您的宝贵时间。
【问题讨论】:
标签: python
我正在尝试将一些 python 代码转换为 scala 代码。所以我完全是 Python 的菜鸟。
但是为什么有些类有对象作为参数却从不显式使用呢?首先将其作为参数的原因是什么?
例子:
class Table(object)
感谢您的宝贵时间。
【问题讨论】:
标签: python
在 Python2 中,这将 Table 声明为 new-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__']
另外,properties 和 super 不适用于经典类。
在 Python2 中,将所有类都设为新样式类是个好主意。 (虽然标准库中的很多类仍然是经典类,为了向后兼容。)
一般来说,在这样的语句中
class Foo(Base1, Base2):
Foo 被声明为继承自基类 Base1 和 Base2 的类。
object 是 Python 中所有类的母亲。它是一个新式类,所以从object 继承使得Table 一个新式类。
【讨论】:
object)in the tutorial。
object 的类。这两个语句放在一起意味着您不需要在 Python3 的类库列表中包含 object,因为所有类都是 Python3 中的新型类。
Table 类扩展了一个名为 object 的类。这不是争论。您可能想要显式扩展object 的原因是它将类变成了一种新型类。如果您没有明确指定它扩展 object,直到 Python 3,它将默认为旧样式类。 (从 Python 3 开始,无论您是否明确扩展 object,所有类都是新样式的。)
有关新式和旧式课程的更多信息,请see this question。
【讨论】:
class Table 和 class Table(object) 对于 Python 来说没有什么不同。
它不是一个参数,它是从对象(与许多其他语言一样是基类)扩展而来的。
它只是说它继承了“对象”中定义的任何内容。这是默认行为。
【讨论】:
object 仅在 Python 3 中是默认行为。在 python 2 中,类扩展对象具有不扩展对象的类所没有的属性。
请注意,“new-style”与“old-style”类的区别是 Python 2.x 特有的;在 3.x 中,所有类都是“new-style”。
【讨论】:
object 是python中定义的最基本的类对象类型。 对象的属性如下图所示
**>>> 目录(对象)
['class', 'delattr', 'doc', 'format', 'getattribute', 'hash', 'init', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', '子类挂钩']**
所以 Table(object) 只是继承。!
【讨论】:
1)类名(对象):2)类名: 两者都是一样的,但是第一个写的更好,继承其他类的时候看起来更好,看起来是同质的。
怎么一样? 因此,Python 中的每一件事都属于对象,这意味着 Python 中的每一件事都具有对象的属性,不管写不写它都会理解它。 一开始我们明确告诉它,第二次我们没有。
【讨论】: