Python - мне нужно узнать о классах старого стиля? - PullRequest
5 голосов
/ 19 февраля 2011

В настоящее время я изучаю Python 2.6.5 и узнал о классах старого стиля и новых классах стиля.

Я понимаю, что эти классы все еще существуют только для обратной совместимости и что они удалены в Python 3.

Итак, вопрос такой: как новичок в языке, нужно ли мне изучать классические классы?

P.S. Я изучаю Python 2, потому что Python 3 все еще не полностью поддерживается в фреймворках, и я также хочу изучить некоторые фреймворки. План будет состоять в том, чтобы перейти на Python 3, когда фреймворки нагонят, но до тех пор мне нужно беспокоиться о классах старого стиля?

Ответы [ 2 ]

13 голосов
/ 19 февраля 2011

Нет.Не беспокойсяПросто унаследуйте все ваши классы от object (или от классов, которые наследуют от object), и вам будет хорошо идти.Затем, когда вы переходите на Python 3, вы можете забыть этот бит синтаксиса.

На данный момент нет никакого преимущества в использовании или даже изучении классов старого стиля.

Так что просто убедитесь, что всеобъявления вашего класса выглядят так:

class foo(object):
    ...

(или наследуют от чего-то другого, кроме object, которое делает наследованным от object), а затем притворяются, что это то, как оновсегда был!

4 голосов
/ 19 февраля 2011

Хотя я согласен с Даниэлем ДиПаоло в том, что вам никогда не нужно использовать классы старого стиля в вашем коде, будут моменты, когда вам нужно будет немного их понять.

Например, в классах старого стиля вы не можете использовать super для вызова родительского метода - и это может укусить вас, когда вы попытаетесь создать подкласс, например, класс urllib2.Request. Если вы сделаете это, не осознавая, вы получите загадочную ошибку super() argument 1 must be type, not classobj, отладка которой может занять целую вечность.

(Как вы, вероятно, можете сказать, я был там ...)

...