mieć (co najmniej) dwie alternatywy, aby osiągnąć to, co chcesz.
Najlepszą alternatywą byłoby zastąpienie metody __str__
klasy inspect.Signature
. Jednak, jak jest napisane w C, jest tylko do odczytu.
tak zrobić, że trzeba rozszerzyć klasę, jak następuje:
class MySignature(inspect.Signature):
def __str__(self):
return '(...)'
następnie po zdefiniowaniu czynność wykonać:
func_signature = inspect.signature(func)
func.__signature__ = MySignature(func_signature.parameters.values(),
return_annotation=func_signature.return_annotation)
które następnie powrócić następujące dla help(func)
:
Help on function func in module __main__:
func(...)
(END)
Przy takim podejściu inspekcja.signature nadal działa:
In [1]: inspect.signature(func)
Out[1]: <MySignature (...)>
Alternatywnie, jeśli nie troszczą się o byciu w stanie prawidłowo introspekcji swoją funkcję (i prawdopodobnie kilka innych przypadków użycia), można określić wartość swoich funkcji na __signature__
do obiektu, który nie jest Signature
instancja:
def func(x, y):
pass
func.__signature__ = object()
help(func)
generuje wynik:
Help on function func in module __main__:
func(...)
(END)
Ale teraz inspect.signature(func)
podniesie TypeError: unexpected object <object object at 0x10182e200> in __signature__ attribute
.
Uwaga: ta ostatnia wersja jest dość hackowata i nie polecam jej.
Aby uzyskać więcej informacji na temat tych dwóch technik i sposobu działania podpisu, patrz: PEP 0362.
Aktualizacja: dla Pythona 2.7 można wykonać następujące czynności (chyba lepiej przy użyciu mock ramy):
In [1]: import inspect
In [2]: def myformatargspec(*args, **kwargs):
...: return '(...)'
...:
In [3]: def func(x, y):
...: pass
...:
In [6]: inspect.formatargspec = myformatargspec
In [7]: help(func)
Help on function func in module __main__:
func(...)
(END)
Daj Funkcja A '__doc__' atrybutu (docstring). –
To nie jest dokładnie to samo. Będę edytować moje pytanie, aby Ci pokazać. – zondo
Zobacz moją edycję. – zondo