Möglichkeiten der Offenlegung von Methoden in einem Python-Modul:
Modul foo.py
:
def module_method():
return "I am a module method"
class ModClass:
@staticmethod
def static_method():
# the static method gets passed nothing
return "I am a static method"
@classmethod
def class_method(cls):
# the class method gets passed the class (in this case ModCLass)
return "I am a class method"
def instance_method(self):
# An instance method gets passed the instance of ModClass
return "I am an instance method"
jetzt, die Einfuhr:
>>> import foo
>>> foo.module_method()
'I am a module method'
>>> foo.ModClass.static_method()
'I am a static method'
>>> foo.ModClass.class_method()
'I am a class method'
>>> instance = ModClass()
>>> instance.instance_method()
'I am an instance method'
Wenn Sie eine Klassenmethode nützlicher machen wollen, importieren Sie die Klasse direkt:
>>> from foo import ModClass
>>> ModClass.class_method()
'I am a class method'
Sie können auch import ... as ...
um sie besser lesbar zu machen:
>>> from foo import ModClass as Foo
>>> Foo.class_method()
'I am a class method'
Welche Sie verwenden sollten, ist eine Frage des Geschmacks. Meine persönliche Faustregel lautet:
- Einfache Utility-Funktionen, die im Allgemeinen auf Dinge wie Sammlungen einwirken, Berechnungen durchführen oder Ressourcen abrufen, sollten Modulmethoden sein.
- Funktionen, die sich auf eine Klasse beziehen, aber weder eine Klasse noch eine Instanz benötigen, sollten statische Methoden sein.
- Funktionen, die sich auf eine Klasse beziehen und die Klasse zum Vergleich oder zum Zugriff auf Klassenvariablen benötigen, sollten Klassenmethoden sein.
- Funktionen, die auf eine Instanz wirken, sollten Instanzmethoden sein.