2010-08-20 13 views
8

Poszukuję sposobu sprawdzenia liczby argumentów, które dana funkcja pobiera w Pythonie. Celem jest uzyskanie bardziej niezawodnej metody łatania moich zajęć do testów. Tak więc chcę zrobić coś takiego:Czy istnieje sposób sprawdzania podpisu funkcji w Pythonie?

class MyClass (object): 
    def my_function(self, arg1, arg2): 
     result = ... # Something complicated 
     return result 

def patch(object, func_name, replacement_func): 
    import new 

    orig_func = getattr(object, func_name) 
    replacement_func = new.instancemethod(replacement_func, 
          object, object.__class__) 

    # ... 
    # Verify that orig_func and replacement_func have the 
    # same signature. If not, raise an error. 
    # ... 

    setattr(object, func_name, replacement_func) 

my_patched_object = MyClass() 
patch(my_patched_object, "my_function", lambda self, arg1: "dummy result") 
# The above line should raise an error! 

Dzięki.

+0

"łatanie moje zajęcia dla testów"? Dlaczego nie używasz próbnych obiektów? http://python-mock.sourceforge.net/? –

+1

Jestem nowy w używaniu mocks. "Dorastałem" upieranie się i łatanie. Dostaję trening i zastanawiam się, kiedy go użyć, ale w międzyczasie wciąż mam projekty do wykończenia i testy do napisania :). – mjumbewu

Odpowiedz

9

Można użyć:

import inspect 
len(inspect.getargspec(foo_func)[0]) 

To nie potwierdzi parametrów o zmiennej długości, takich jak:

def foo(a, b, *args, **kwargs): 
    pass 
2

Moduł inspect umożliwia zbadanie argumentów funkcji. Zostało to zadane kilka razy w Stack Overflow; spróbuj wyszukać niektóre z tych odpowiedzi. Na przykład:

Getting method parameter names in python

+0

Rozumiem. Przed publikacją trochę poszperałem, ale chyba powinienem użyć więcej terminów wyszukiwania. Przepraszam, że przeszkadzam. – mjumbewu

+0

Bez problemu. Lepiej jednak wskazać ci inne odpowiedzi niż po prostu powtórzyć wszystko tutaj. –

Powiązane problemy