2024-05-15 00:35:31 发布
网友
我正在尝试将一些python代码转换成scala代码。所以我完全不懂Python。
但为什么有些类将对象作为参数,但从不显式地使用它呢?首先把它作为参数的理由是什么?
示例:
class Table(object)
谢谢你抽出时间。
在Python2中,它声明Table为new-style class(与“经典”类相反)。 在Python3中,所有类都是新样式的类,因此不再需要这样做。
Table
新样式类有一些经典类所缺少的特殊属性。
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的类。
Foo
Base1
Base2
object是Python中所有类的母类。它是一个新样式的类,因此从object继承会使Table成为一个新样式的类。
object
Table类正在扩展名为object的类。这不是争论。可能需要显式扩展object的原因是它将类转换为新样式的类。如果在Python 3之前没有显式指定它扩展object,那么它将默认为一个旧样式类。(自从Python 3以来,所有类都是新样式的,不管您是否显式地扩展了object。)
有关新样式和旧样式类的详细信息,请see this question。
只需注意,“new-style”与“old-style”类的区别是特定于Python 2.x的;在3.x中,所有类都是“new-style”。
在Python2中,它声明
Table
为new-style class(与“经典”类相反)。 在Python3中,所有类都是新样式的类,因此不再需要这样做。新样式类有一些经典类所缺少的特殊属性。
另外,properties和super也不能用于经典类。
在Python2中,最好让所有类都成为新样式的类。(尽管标准库中的许多类仍然是经典类,但为了向后兼容。)
一般来说,在一个声明中
Foo
被声明为继承自基类Base1
和Base2
的类。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”。
相关问题 更多 >
编程相关推荐