私はPythonを初めて使い、入出力を学んでいます。今、私はコマンドライン入力から指定したファイルからオブジェクトに属性を追加しようとしています。例えばコマンドライン入力からPythonオブジェクトを初期化する
、私は次のことを実行したい:$ /...filepath.../ python3 myCode.py < 06
ファイル06
myCode.py
へ
$ /...filepath.../ cat 06
7
4 5 2 7 88 2 1
の内容を渡します。 myCode.py
と06
の両方が同じディレクトリにあります。
私は次のように属性を持つコマンドライン呼び出しからMyClass
オブジェクトを作成しようとしています:
## 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)
が、私はself._num_one
ために、次のエラーを取得しますができTOR印刷self._num_many
だとしています理由は分かりません。 self._num_one
とself.num_many
の順番を交換すると、self._num_one
を得ることができます。 06
は2行しかないので、私が最初に読んでいない最初の行はありますか?なぜ2つの属性のどちらか一方しか印刷できないのですが、両方を印刷するにはどうしたらよいですか?
多くのありがとうございます。
一般に、クラスイニシャライザでIOなどの複雑な操作を行うことは悪い考えです。この場合、新しいオブジェクトを作成するたびにstdinから読み込みます。それはそれをはるかに困難にします。 "ファクトリ関数"を使ってstdinを読み込み、入力を解析し、適切な型のクラスをインスタンス化する方が良いでしょう。 – Keith