我试图将一些python代码转换为scala代码。所以我是一个Python的总noob。以对象作为参数的类
但为什么有些类有对象作为参数,但从来没有明确使用它?首先将它作为参数的理由是什么?
例子:
class Table(object)
谢谢您的时间。
我试图将一些python代码转换为scala代码。所以我是一个Python的总noob。以对象作为参数的类
但为什么有些类有对象作为参数,但从来没有明确使用它?首先将它作为参数的理由是什么?
例子:
class Table(object)
谢谢您的时间。
在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
成为一种新式课程。
你可以将我重定向到一个源,提到对象是不必要的参数在Python3中?我似乎无法找到它。谢谢 –
在StackOverflow([这里,例如](https://stackoverflow.com/a/16193572/190597))上已经提到过很多次,但是我一直没有能够在文档。它隐含地显示出来了(通过在类的基础列表中省略'object')[在教程中](https://docs.python.org/3/tutorial/classes.html#class-definition-syntax)。 – unutbu
[Python3文档](https://docs.python.org/3/glossary.html#term-new-style-class)也声明“新风格类”是“风格的旧名称”类**现在用于所有类对象**“(我强调)。并且[Python2文档状态](https://docs.python.org/2/glossary.html#term-new-style-class)“新风格的类”是从“object”继承的任何类。这两个语句放在一起意味着你不需要在Python3的类库列表中包含'object',因为所有的类都是Python3中的新类。 – unutbu
Table
该课程正在扩展名为object
的课程。这不是一个争论。你可能想明确地扩展object
的原因是它把这个类变成了一个新风格的类。如果你没有明确指定它扩展为object
,直到Python 3,它将默认为一个旧式类。 (从Python 3开始,所有类都是全新的,无论您是否明确地扩展了object
)。
有关新式和旧式类的更多信息,请致电see this question。
这是更多简洁明了的答案。谢谢。 – Sabuncu
class Table和class Table(object)对于Python来说没有什么不同。
它不是一个参数,它是从对象(与许多其他语言一样是基类)扩展而来的。
它所说的只是它继承了“对象”中定义的任何东西。这是默认行为。
自动扩展'object'的类只是Python 3中的默认行为。在python 2中,类扩展对象具有一个不扩展对象的类不会拥有的属性。 –
刚一说明,“新风格”与‘旧风格’的等级区分是针对Python 2.x的;在3.x中,所有的类都是‘新式’
1)。类名(object):2)类名: 它们都是相同的,但在写作方面第一个更好,在继承其他类到另一个类时它看起来更好,它看起来是同类的。
如何相同? 所以,Python中的每一件事都是在对象的意义下意味着Python中的每一件事物都具有对象的属性,如果写或不理解它。首先,我们明确地告诉它,其次我们不知道。
Python 2中不是这种情况,请参阅接受的答案以了解详细信息。 – niemmi
对象是python中定义的类对象的最基类型。对象的属性 可以看出如下
** >>> DIR(对象)
[ '类', 'delattr', 'DOC', '格式' '的getAttribute', '哈希', '初始化', '新', '减少','reduce_ex ' '再版', 'SETATTR', '的sizeof', 'STR',' subclasshook“] **
所以表(对象)是刚刚继承。 !
[Python中的旧风格和新风格类]可能的重复(http://stackoverflow.com/questions/54867/old-style-and-new-style-classes-in-python) – JBernardo