So erstellen Sie eine Utility-Klasse richtig

Ich habe eine Datei, die eine Utility-Datei sein soll. Die Datei sollte viele statische Methoden enthalten.

Soll ich die Methoden in einer Klasse so definieren:

#utility.py class utility(object): @staticmethods def method1(a,b,c): pass @staticmethods def method2(a,b,c): pass 

Oder benutze es so (ohne Klasse):

 #utility.py def method1(a,b,c): pass def method2(a,b,c): pass 

  • Python extrem dynamische Klasseneigenschaften
  • Wenn ich eine Python-Unterklasse instanziiere, überschreibt es das Basisklassen-Attribut
  • Neue Instanz von toplevel Klassen machen überlappende Widgets
  • Wie erkennt man die Methodenüberladung in Unterklassen in Python?
  • Drucken aller Instanzen einer Klasse
  • Holen Sie sich den Namen der aktuellen Klasse?
  • 3 Solutions collect form web for “So erstellen Sie eine Utility-Klasse richtig”

    Die zweite Möglichkeit ist der modus operandi in python. Ich meine, wenn alles, was du tust, ist die Einfuhr von Funktionen, dann können Sie so etwas tun:

     from utility import some_func 

    Die deine Funktion importieren wird.

    Best Practice ist, wenn Sie nur statische Funktionen verwenden, dann legen Sie sie einfach in den globalen Namespace eines separaten Moduls, es wird Ihr Leben viel einfacher machen. Was du versuchst zu tun ist, macht Gegenstände und fülle sie einfach mit statischen Methoden. Warum dies, wenn man einfach die Funktionen in einer .py Datei definieren kann?

    In der Tat, was du zu tun versucht hast, ist getan worden. Sie versuchen, einige gute Utility-Funktionen zu speichern. Nun, python-requests , ist eine Drittanbieter-Bibliothek, die nur von der Mehrheit der Pythonistas angeführt wird, tut dies einfach. Es speichert seine guten Utility-Funktionen in einem separaten Modul. Hier ist das Beispiel.

    Während diese Frage ist ein wenig Meinung basiert, würde ich sagen, die zweite ist besser. Es reduziert Redundanz. Mit der ersten Methode, müssen Sie tun:

     import utility utility.utility.method1(...) 

    oder:

     from utility import utility utility.method1(...) 

    Mit dem zweiten kann man aber einfach tun:

     import utility utility.method1(...) 

    oder:

     from utility import method1 method1(...) 

    Wenn du eine Klasse machst, die nur statische Methoden enthält, ist meine Frage "warum brauchst du die Klasse?" Es trägt hier nichts Positives bei.

    Klassen verkapseln sowohl Daten als auch Verhalten, so dass allgemeine Regeln:

    • Wenn du etwas nur mit Daten und keine Methoden namedtuple , sollte es wohl ein namedtuple , nicht eine class , es sei denn, du musst diese Daten nach dem Erstellen ändern.
    • Wenn eine Funktion auf Instanzdaten zugreift, sollte es eine Methode sein.
    • Wenn eine Funktion auf keine @classmethod zugreift, sondern auf Klassendaten zugreift, sollte es eine @classmethod .
    • Wenn eine Funktion weder auf Instanzdaten noch auf Klassendaten zugreift, sollte es eine eigenständige Funktion sein, es sei denn, es gibt einen wirklich zwingenden Grund, es zu einem @staticmethod zu machen.
    • Wenn eine class nur eine Methode hat oder eine Methode zusätzlich zu __init__() , dann können Sie fast sicher und können sie als Funktion umschreiben.

    Klassen sind wirklich leicht zu missbrauchen, aber die Versuchung, alles in eine Klasse zu schieben, sollte wirklich vermieden werden. Du solltest sie benutzen, wenn sie Sinn machen und sie vermeiden, wenn sie es nicht tun.

    Python ist die beste Programmiersprache der Welt.