2009-10-08 2 views
4

В Python я могу определить 'Foo' класса следующим образом:типа Python 'объект' и наследование

class foo: 
    pass 

или

class foo(object): 
    pass 

В чем разница? Я попытался использовать функцию issubclass (foo, object), чтобы увидеть, возвращает ли она True для обоих определений классов. Это не.

 
IDLE 2.6.3  
>>> class foo: 
     pass 

>>> issubclass(foo, object) 
False 
>>> class foo(object): 
     pass 

>>> issubclass(foo, object) 
True 

Спасибо.

ответ

9

Унаследовано от object делает класс «классом нового стиля». Здесь обсуждается стиль старого стиля и новый стиль: What is the difference between old style and new style classes in Python?

Как отметил @CrazyJugglerDrummer ниже, на Python 3 все классы являются классами «нового стиля». В Python 3, следующие два объявления точно эквивалентны:

class A(object): 
    pass 

class A: 
    pass 
+1

дополнение: в py 3, все автоматически новый класс стиля –

2

Первый создает «старый стиль» класса, которые устарели и были удалены в Python 3. Вы не должны использовать его в Python 2. Икс. См. Документацию для Python data model.

2

Старый стиль и нового стиль объектов ... они имеют красивый различное поведение, например, в конструкторах, или в разрешении порядка метода в множественном наследовании.

Смежные вопросы