Найти - Пользователи
Полная версия: множественное наследование
Начало » Python для новичков » множественное наследование
1
testser
Добрый день. Недавно начал изучать питон, столкнулся с таким явлением:
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

Почему это так? Буду очень благодарен за любую информацию/намек. Спасибо.
crchemist
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>
>>>
crchemist
є такий атрибут __bases__ в якому задано поряд пошуку методів. так як клас ‘a’ has __new__ and __init__ - то вони викликаються з нього. А взагалі погано змішувати старі і нові класи
Александр Кошелев
crchemist
по русски пожалуйста.
crchemist
Daevaorn
in Ukrainian please (http://python.com.ua/forum/viewtopic.php?id=2658). вже купу разів обговорювали на якій мові на цьому форумі можна писати.. і я не раз писав НЕ БУДУ ПИСАТИ РОСІЙСЬКОЮ!
testser
2crchemist спасибо за помощь, разобрался.

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

PS статья про new-style classess
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB