Старый стиль класса:
class BaseClass:
def m1(self):
return 1
class MyClass(BaseClass):
def m1(self):
return BaseClass.m1(self)
Новый стиль класса:
class BaseClass(object):
def m1(self):
return 1
class MyClass(BaseClass):
def m1(self):
return super(MyClass, self).m1()
У них много возможностей с использованием новых стилей классов, таких как:
super(classname, ...).method()
вместо parentclassname.method(...)
.Родительский метод теперь определяется из MRO (ранее он был определен вами). __slots__
- это новая функция, которая может помешать добавить dict () в ваш объект и выделить память только дляатрибут в __slots__
- свойствах python (
@property
, property()
...) работает только для новых стилей классов.
О MRO, проверьте документ Порядок разрешения методов Python 2.3 .До версии 2.2 реализация была:
сначала глубина, а затем слева направо
, в то время как новая - C3, гораздо сложнее, но обрабатывает различные случаи, чем предыдущаянеправильно обработал (проверьте сообщение Samuele Pedroni в списке рассылки python ).