Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2008 18:24:48

testser
От:
Зарегистрирован: 2008-09-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

множественное наследование

Добрый день. Недавно начал изучать питон, столкнулся с таким явлением:

class a(object):
def __new__(self):
print "a_new"
return object.__new__(self)

class b:
def __init__(self):
print "b_init"
два простых класса. Если делать так:
class c(b, a):
pass

test = c()
то печатает
a_new
b_new, а если так:
class c(a, b):
pass

test=c()
то только
a_new

Почему это так? Буду очень благодарен за любую информацию/намек. Спасибо.



Офлайн

#2 Сен. 17, 2008 19:01:57

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

множественное наследование

new-style classes мають визначений __init__ :

>>> class c(a, b):pass
...
>>> c.__bases__
(<class '__main__.a'>, <class __main__.b at 0xb8024ddc>)
>>> a.__init__
<slot wrapper '__init__' of 'object' objects>
>>>



Офлайн

#3 Сен. 17, 2008 19:04:03

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

множественное наследование

є такий атрибут __bases__ в якому задано поряд пошуку методів. так як клас ‘a’ has __new__ and __init__ - то вони викликаються з нього. А взагалі погано змішувати старі і нові класи



Офлайн

#4 Сен. 17, 2008 20:15:35

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

множественное наследование

crchemist
по русски пожалуйста.



Офлайн

#5 Сен. 17, 2008 22:15:26

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

множественное наследование

Daevaorn
in Ukrainian please (http://python.com.ua/forum/viewtopic.php?id=2658). вже купу разів обговорювали на якій мові на цьому форумі можна писати.. і я не раз писав НЕ БУДУ ПИСАТИ РОСІЙСЬКОЮ!



Офлайн

#6 Сен. 18, 2008 10:22:39

testser
От:
Зарегистрирован: 2008-09-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

множественное наследование

2crchemist спасибо за помощь, разобрался.

2Daevaorn class “a” наследуется от object, у него определен __init__ (можно посмотреть dir(object)), соответственно при поиске __init__ у класса “c” находится object.__init__, а не b.__init__

PS статья про new-style classess



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version