Форум сайта python.su
Всем здрасте.
Чего-то не могу понять такую вещь…
Есть класс:
class A:
def __init__(self):
...
def start(self):
...
class B(A):
def __init__(self):
A.__init__(self)
def start(self):
check = True
super(B, self).start()
Офлайн
class A(object)
Офлайн
спасибо.
Офлайн
А так нельзя?
>>> class A:
def __init__(self):
print ‘A - init’
def start(self):
print ‘A - start’
>>> class B(A):
def __init__(self):
A.__init__(self)
def start(self):
print ‘B - start’
A.start(self)
>>> cl = B()
A - init
>>> cl.start()
B - start
A - start
>>>
Офлайн
poltergeistМожно, но ИМХО не нужно :)
А так нельзя?
Офлайн
slivlenА почему? Ну то почему первый метод (с помощью super()) предпочтительнее?
Можно, но ИМХО не нужно
Офлайн
Предпочтительней использовать new style classes, наследуя для этого все свои от object.
Потому что они дают много вкусных возможностей, недоступных при прежнем подходе.
А super - стандартный способ вызова родителя в new-style.
Old-style classes уйдут окончательно в Py3k, но уже сейчас стоит от них отвыкать.
О различиях, вернее, о новых фичах new-style написано в http://www.python.org/doc/newstyle. Существуют и многочисленные статьи на русском по этой теме.
Офлайн
Андрей Светлов, большое спасибо!
Офлайн
“Python 3000 is a new version of the language that is incompatible with the 2.x line of releases.” - это меня больше всего поразило:) Это и радует и добавляет некоторые проблемки, особенно для не маленьких проектов. Молодцы конечно, что за год до релиза выдали альфу и доки:)
P.S. от меня тож спасибо, а то так заработаешься, что вокруг ничего не замечаешь что творится. Знал что вышла 3000 альфа, но не думал что столько изменений будет в синтаксисе.
Офлайн
pentoИМХО, super предпочтительнее потому, что так можно легко и просто менять родителей твоего класса, не заботясь о подобных мелочах, как явный вызов метода из какого-то (необязательно родительского) класса.slivlenА почему? Ну то почему первый метод (с помощью super()) предпочтительнее?
Можно, но ИМХО не нужно
Офлайн