感谢您帮助我所谈论的一个的n00b为什么你不必为python中只有__init__的类声明(object)?
例子:
class Complex:
def __init__(self,x,y):
self.x = x
self.y = y
为什么,当你声明类,您不必添加(对象)来了,
class Complex(object):
感谢您帮助我所谈论的一个的n00b为什么你不必为python中只有__init__的类声明(object)?
例子:
class Complex:
def __init__(self,x,y):
self.x = x
self.y = y
为什么,当你声明类,您不必添加(对象)来了,
class Complex(object):
在Python 2.x中,这使得您的类old-style具有不同的继承语义。由于您不使用继承(并且简单情况下方法解析顺序相同),所以在实践中没有任何区别。如果您使用Python 2.x进行编程,您应该添加(object)
以从新型类的优点中获益。
在Python 3.2中,object
只是您继承的默认类,可以省略。
class Complex1:
def __init__(self,x,y):
self.x = x
self.y = y
>>> dir(Complex1)
['__doc__', '__init__', '__module__']
class Complex2(object):
def __init__(self,x,y):
self.x = x
self.y = y
>>> dir(Complex2)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribut
e__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_e
x__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_
_weakref__']
当你定义的类简单地这样class Complex
你不从其它类继承的类,因此它只有那些你这样定义__init__
属性(和__doc__
和__module__
)。这是一个旧式班。
当你定义这样一个类 - class Complex(object)
,这意味着你继承了类object
的类。因此,它的许多属性都是自动继承的,而不需要你自己再次定义它们,如__str__
,__class__
等。这是新风格类。
在python 2.x中,新样式类通常是首选的,因为使用旧样式类可能会导致一些问题。例如,__slots__
,super
,descriptors
不适用于旧式类。
为了保持向后兼容性,旧式的类已经保存在python 2.x中。在python 3中,这是清理和你定义的任何类是一个新的风格类。
(另外,从你说的话,从object
继承无关,只有定义__init__
)