2012-03-14 9 views
-2

В следующем коде C наследуется от A и B так, когда c.get(), это получить, какие классы получают вызывается метод может кто-нибудь объяснить это .....Python множественного наследования собственности

class A: 
    def get(self): 
    print "In A get" 

class B: 
    def get(self): 
    print "In B get" 

class C(A,B): 
    def __init__(self): 
    print "In c init" 

c=C() 
c.get() 
+5

Почему вы не запустить код и посмотреть? – Marcin

+0

Также: Какая версия python это? Это важно. – Marcin

+0

Возможно, это поможет: http://stackoverflow.com/questions/3810410/python-multiple-inheritance-from-different-paths-with-same-method-name –

ответ

4

Ну , это должно быть из класса A. Поскольку поиск выполняется по глубине, слева направо.

+0

Теоретически он должен вызывать метод, но что такое ошибка, о которой я упомянул. – Rajeev

+2

@Rajeev: Вы забыли добавить параметр 'self' в методы' get'. –

+0

@Niklas B: Эй, это сработало сейчас ... спасибо ... – Rajeev

0

Указанная вами ошибка ясна: ваши методы предназначены для ссылки на связанный объект, но они этого не делают.

Изменение их

def get(self): 

, поскольку они являются методами.

1

Прежде всего этот код является inncorect, поскольку он не имеет собственных переменных в объявлении метода. Правильная версия:

class A: 
    def get(self): 
    print "In A get" 

class B: 
    def get(self): 
    print "In B get" 

class C(A,B): 
    def __init__(self): 
    print "In c init" 

c=C() 
c.get() 

Во-вторых это будет печатать:

In c init 
In A get 

, как упорядочение определяется в Method Resolution Order (MRO). Basicall класс C будет иметь все методы/атрибуты B, а затем переопределить все mehods/attribues от A.

0

Это будет метод A class, как говорит emirc.

дается ошибка, потому что вы должны добавить self параметр для get определения, таким образом:

class A: 
def get(self): 
print "In A get" 

class B: 
def get(self): 
print "In B get" 

class C(A,B): 
def __init__(self): 
print "In c init" 

c=C() 
c.get() 
Смежные вопросы