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