2014-10-15 2 views
0

Есть ли способ выполнить метод c, когда вызывается метод b. I.e., если метод b называется возвратом что-то в методе c. Но как я могу проверить, вызван ли метод?Как проверить один метод, если был вызван другой метод?

Class A: 

    def __init__(self, arg1): 
     return self.arg1 
    def b(self, arg2): 
     return self.arg2 

    def c(self): 
     # I want to know when method b is called 
     # so I can execute suite inside c. 
     # Is there anyway to do this 
     # for example if method b is called return True, else if return something else. 
+0

Почему бы не просто добавить 'self.c()' to 'b'? – jonrsharpe

ответ

1

Есть в любом случае, чтобы выполнить метод C, когда метод Ь называется?

Абсолютно! Вам просто нужно вызвать c из b.

class A: 
    def __init__(self, arg1): 
     self.arg1 = arg1 
    def b(self, arg2): 
     self.c() 
     return self.arg1 * 16 + arg2 
    def c(self): 
     print "c is being called!" 

foo = A(23) 
foo.b(42) 

Теперь, каждый раз, когда вы звоните b, метод c также будет выполнен.


(кстати, __init__ не разрешается возвращать ничего, кроме None и self.arg2 не существует, поэтому я изменил некоторые из ваших методов)

0

Вы хотите позвонить c именно тогда, когда b называется? Или, когда вы вызываете c, проверьте, был ли вызван b?

Если вы хотите c к вызывается, когда b называется просто назвать его

def b(self, arg2): 
    self.c() 
    ### rest of b 

Если вы просто хотите, чтобы отметить, что b называлась вы можете поместить переменную члена в вашем классе пути, инициализировать его False и установите его True, когда вы позвоните b

0

Я не знаю, правильно ли я получил ваш вопрос, но вы можете передавать функции в качестве аргументов в Python. Например:

def square(x): 
    return x ** 2 

def cube(x): 
    return x ** 3 

def print_a_function_result(a_function, x): 
    return a_function(x) 

>>> print_a_function_result(square, 2): 
>>> 4 
>>> print_a_function_result(cube, 2): 
>>> 8 
>>> print_a_function_result(square, 3): 
>>> 9 
>>> print_a_function_result(cube, 3): 
>>> 27 
+0

Да, но в его случае это класс, поэтому экземпляр класса уже знает о его методах, поэтому нет необходимости передавать метод как arg. –

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