Python 使用对象作为参数初始化
我正在尝试将一些python代码转换为scala代码。所以我在Python中完全是个笨蛋 但为什么有些类将对象作为参数,但从不显式使用它?把它作为参数的理由是什么 例如:Python 使用对象作为参数初始化,python,Python,我正在尝试将一些python代码转换为scala代码。所以我在Python中完全是个笨蛋 但为什么有些类将对象作为参数,但从不显式使用它?把它作为参数的理由是什么 例如: class Table(object) 谢谢您的时间。表类正在扩展一个名为对象的类。这不是争论。您可能希望显式扩展对象的原因是它将类转换为一个新样式的类。如果在Python3之前没有明确指定它扩展对象,它将默认为一个旧式类。(自Python3以来,无论是否显式扩展object,所有类都是新样式的。) 有关新样式和旧样式类的更
class Table(object)
谢谢您的时间。表类正在扩展一个名为
对象
的类。这不是争论。您可能希望显式扩展对象
的原因是它将类转换为一个新样式的类。如果在Python3之前没有明确指定它扩展对象
,它将默认为一个旧式类。(自Python3以来,无论是否显式扩展object
,所有类都是新样式的。)
有关新样式和旧样式类的更多信息,请参见。对于Python来说,类表和类表(对象)没有什么不同 它不是一个参数,它是从对象(和许多其他语言一样是基类)扩展而来的
它所说的只是继承了“对象”中定义的任何内容。这是默认行为。在Python2中,这声明
表
为a(与“经典”类相反)。
在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中所有类的母亲。它是一个新样式的类,因此从对象继承使表成为一个新样式的类。请注意,“新样式”与“旧样式”的区别是Python 2.x特有的;在3.x中,所有类都是“新样式”。1)类名(对象):2)类名:
它们都是相同的,但第一个在编写方面非常好,它在将其他类继承到另一个类时看起来更好,它看起来是同质的
有多相似?
所以,Python中的每一件事都在object之下意味着Python中的每一件事都有object的属性,不管写不写,它都会理解它。
在第一个例子中,我们明确地告诉它,在第二个例子中,我们没有这样做。对象是python中定义的最基本的类对象类型。
对象的属性如下所示
**>>>目录(对象)
[“class”、“delattr”、“doc”、“format”、“getattribute”、“hash”、“init”、“new”、“reduce”、“reduce ex”、“repr、“setattr”、、setattr、、,“str”,“子类hook”]**
So表(对象)只是继承。!自动扩展对象的类的可能重复只在Python 3中是默认行为。在Python 2中,类扩展对象具有不扩展对象的类所不具有的属性。这是更直接和简洁的答案。谢谢。Python 2中不是这种情况,请参阅ac详细信息请接受回答。您能将我重定向到一个源,其中提到对象在Python3中不必作为参数吗?我似乎找不到它。谢谢您在StackOverflow()中多次提到它,但我在文档中找不到关于它的简单声明。它隐式显示(通过从类基列表中省略object
)。还声明“新样式类”是“现在用于所有类对象的类风格的旧名称”(我的重点)。以及“新样式类”“是从object
继承的任何类。这两条语句放在一起意味着您不需要将object
包含在Python3中的类基列表中,因为所有类都是Python3中的新样式类。