2011-07-18 19 views

回答

3

在Python 2.x中,这使得您的类old-style具有不同的继承语义。由于您不使用继承(并且简单情况下方法解析顺序相同),所以在实践中没有任何区别。如果您使用Python 2.x进行编程,您应该添加(object)以从新型类的优点中获益。

在Python 3.2中,object只是您继承的默认类,可以省略。

3
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__'] 
0

当你定义的类简单地这样class Complex你不从其它类继承的类,因此它只有那些你这样定义__init__属性(和__doc____module__)。这是一个旧式班。

当你定义这样一个类 - class Complex(object),这意味着你继承了类object的类。因此,它的许多属性都是自动继承的,而不需要你自己再次定义它们,如__str____class__等。这是新风格类。

在python 2.x中,新样式类通常是首选的,因为使用旧样式类可能会导致一些问题。例如,__slots__,super,descriptors不适用于旧式类。

为了保持向后兼容性,旧式的类已经保存在python 2.x中。在python 3中,这是清理和你定义的任何类是一个新的风格类。

(另外,从你说的话,从object继承无关,只有定义__init__

相关问题