Ich bin neu in Python und lerne Eingabe/Ausgabe. Im Moment versuche ich, Attribute zu einem Objekt aus einer Datei hinzuzufügen, die ich über die Befehlszeile eingegeben habe.Initialisiere ein Python-Objekt über die Kommandozeileneingabe
Zum Beispiel möchte ich folgendes ausführen: den Inhalt der Datei 06
$ /...filepath.../ cat 06
7
4 5 2 7 88 2 1
zu myCode.py
$ /...filepath.../ python3 myCode.py < 06
passieren. Sowohl myCode.py
als auch 06
befinden sich im selben Verzeichnis.
Ich versuche, ein MyClass
Objekt aus einem Kommandozeilenaufruf mit Attributen zu erstellen sein, wie folgt:
## myCode.py ##
# create class
class MyClass(object):
def __init__(self):
self._num_one = int(sys.stdin.readline())
self._num_many = [int(x) for x in sys.stdin.readline().split()]
# print attributes
print(MyClass()._num_many)
print(MyClass()._num_one)
aber ich erhalte die folgenden Fehler ValueError: invalid literal for int() with base 10: ''
für self._num_one
aber bin in der Lage tor Druck self._num_many
und Ich bin mir nicht sicher warum. Wenn ich die Reihenfolge self._num_one
und self.num_many
vertausche, kann ich self._num_one
bekommen. Da 06
nur zwei Zeilen lang ist, gibt es eine erste Zeile, die ich anfangs nicht lese? Warum kann ich nur eines der beiden Attribute drucken und wie würde ich beides drucken?
Vielen Dank.
Es wird allgemein als schlechter Entwurf angesehen, komplexe Operationen wie IO in einem Klasseninitialisierer zu haben. In diesem Fall wird jedes Mal, wenn Sie ein neues Objekt erstellen möchten, von stdin gelesen. Das macht das Testen viel schwieriger. Besser, eine "Factory-Funktion" zu verwenden, um stdin zu lesen, die Eingabe zu analysieren und dann die Klasse mit den richtigen Typen zu instanziieren. – Keith