2017-01-17 2 views
-1

Angenommen, ich rufe jedes Mal die eingebaute Methode os.rename (...) auf. Ich möchte seine Argumente ausdrucken. Wie würde ich das tun? Dies funktioniert nicht:Howto Unterklasse einer eingebauten Klasse in Python?

import os 
class A(os): 
def rename(**args): 
    print(args) 
    os.rename(args) 
+2

'os' ist keine Klasse. – user2357112

+1

@ user2357112 Hinzufügen von mehr zu Ihrer Antwort, "os" ist keine Klasse - es ist ein Modul. Sie können ein Modul nicht unterklassifizieren. Sie finden die Argumente in den Python-Dokumenten hier: https://docs.python.org/3/library/os.html?highlight=os.rename#os.rename. –

+0

@ user2357112 Danke. Wenn Umbenennen nur eine gewöhnliche Funktion ist. Dies sollte mit einer Wrapper-Funktion funktionieren? – v217

Antwort

1

os keine Klasse ist, aber Sie können os.rename Patch, wenn Sie mögen. Sie sollten zuerst die integrierte Funktion in einer Variablen speichern (damit Sie das Patch wiederherstellen können), als eine Funktion schreiben, die die Argumente ausgibt und dann die echte Funktion aufruft, und dann diese neue Funktion os.rename:

import os 

real_rename = os.rename 
def patched_rename(*args, **kwargs): 
    print(args, kwargs) 
    return real_rename(*args, **kwargs) 
os.rename = patched_rename 
zuweisen
+0

Vielen Dank! Glauben Sie, dass Sie dies automatisieren können, indem Sie einen gerneric Funktionspatch (Funktionsname) schreiben, der die gepatchte Funktion zurückgibt? – v217

+0

etwas wie folgt: def f (k): real_rename = k def patched_rename (* args, ** kwargs): print (args, kwargs) return real_rename (* args, ** kwargs) return patched_rename os .rename = patched_rename – v217

+0

meinst du sowas wie https://codepaste.net/6kbp4o? –

Verwandte Themen