2012-04-18 2 views
-1

Мой базовый код выглядит следующим образом:Python наследование

class C1(object): 
    def f(self): 
    return 2*self.g() 

    def g(self): 
    return 2 

class C2(C1): 
    def f(self): 
    return 3*self.g() 


class C3(C1): 
    def g(self): 
     return 5 

class C4(C3): 
    def f(self): 
    return 7*self.g() 

obj1 = C1() 
obj2 = C2() 
obj3 = C3() 
obj4 = C4() 

Теперь мой вопрос заключается в следующем: мне нужно написать три заявления о назначении, которые делают следующее:

  • назначить призывающего список для obj2.f() к переменной obj2_calls
  • присвоить список вызовов для obj3.f() t о переменных obj3_calls
  • назначить призывающий список для obj4.f() переменного obj4_calls

Calling список является, например, когда obj1.f() называется, то f метод C1 называется, который вызывает g метода C1 , Это может быть представлено в виде вызова списка формы ['C1.f', 'C1.g']

Я не совсем знаю, как правильно писать операторы присваивания, и я отчаянно хочу, чтобы помочь моему другу с ее вещи.

Если бы вы могли просто показать мне, как правильно правильно выполнить первое задание присваивания, я уверен, что смогу выяснить остальное.

+2

FYI, домашнее задание в порядке на переполнение стека. Домашнее задание * без усилий показано * является проблемой. –

ответ

0

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

Таким образом, спросите себя, что будет делать «obj2.f()».

  • Какой класс obj2? Это C2.
  • Есть ли способ f, определенный для класса C2? Да, есть. Поэтому вызывается метод C2.f.
  • Метод C2.f вызывает self.g, что означает, что он ищет C2.g. Есть ли способ «C2.g»? Нет, поэтому нам нужно перейти к классу, который наследует C2. Строка class C2(C1) сообщает нам, что она унаследована от класса C1, поэтому он вызовет метод C1.g.

Это шаги, чтобы получить первый список вызовов; остальное зависит от вас.

Смежные вопросы