Ich möchte eine Art Dienstprogrammklasse erstellen, die nur statische Methoden enthält, die durch das Namensklassenpräfix aufgerufen werden können. Sieht aus wie ich etwas falsch tue :)Python-Klasse statische Methoden
Hier ist meine kleine Klasse:
class FileUtility():
@staticmethod
def GetFileSize(self, fullName):
fileSize = os.path.getsize(fullName)
return fileSize
@staticmethod
def GetFilePath(self, fullName):
filePath = os.path.abspath(fullName)
return filePath
Nun meine "main" Methode:
from FileUtility import *
def main():
path = 'C:\config_file_list.txt'
dir = FileUtility.GetFilePath(path)
print dir
und ich habe einen Fehler: unbound method GetFilePath() must be called with FileUtility instance as first argument (got str instance instead)
.
A haben ein paar Fragen hier:
- Was mache ich falsch? Sollte die statische Methode nicht nach Klassennamen aufrufbar sein?
- Benötige ich wirklich eine Dienstprogrammklasse oder gibt es andere Möglichkeiten, dasselbe in Python zu erreichen?
- Wenn ich versuche, den Code zu ändern in Haupt Ich erhalte:
TypeError: GetFilePath() takes exactly 1 argument (2 given)
Die neuen main
:
from FileUtility import *
def main():
objFile = FileUtility()
path = 'H:\config_file_list.txt'
dir = objFile.GetFilePath(path)
print dir
Hallo Collin, danke, ich tat, wie Sie Ebene Python-Datei mit einer Liste von Methoden und in Haupt vorgeschlagen,: So Ihre Klasse und Funktion so sein sollte dir = FileUtility.GetFilePath (Pfad) Ich habe einen Fehler bekommen: Unbound-Methode GetFilePath() muss mit FileUtility-Instanz als erstes Argument aufgerufen werden (hat stattdessen eine str-Instanz) – ilyaw77
Entschuldigung, beim ersten Durchlauf habe ich ein Streuner selbst dort gelassen. Haben Sie irgendwo noch eine FileUtility-Klasse? – Collin
Der Punkt ist, sollten Sie keine Klasse FileUtility haben. Genauso wie Sie in C++ freie Funktionen schreiben könnten, sollten Sie dies auch hier tun. Modulnamen (die zu Dateien gehören) sollten auch alle Kleinbuchstaben sein. – Collin