Python の re モジュールを使用してクラスのインスタンスを作成できません。これが私がやろうとしていることです:
- 多くのデータ ファイルの各行をループします。
- 行がレコードの形式と一致する場合は、レコードの 2 つの値を属性として持つ Record クラスのインスタンスを作成します。
re
次のコード フラグメントは、Record クラスのメソッドでモジュールによってキャプチャされた 5 つの大文字の文字列を出力することを期待していますterminal()
が、明らかに何かを誤解しています。実際の出力はコードの下に続きます。
class SrcFile:
def __init__(self, which):
self.name = which
class Record(SrcFile):
def terminal(self):
recordline = re.compile(r"^([A-Z]{5})\s{3}")
if recordline.match(self):
m = recordline.match(self)
return m.group(1)
for f in files:
file = SrcFile(f)
for l in f:
record = Record(f)
print(record.terminal())
繰り返しますが、各レコード行に 5 つの大文字の文字列が表示されることを期待していますが、実際には次のようになります。
Traceback (most recent call last):
File "./next.py", line 78, in <module>
print(record.terminal())
File "./next.py", line 63, in terminal
if recordline.match(self):
TypeError: expected string or buffer
誰かがコードで理由を説明できると助かります。
for f in files:
file = SrcFile(f)
for l in f:
record = Record(f)
の使用は明らかに間違っていますrecord = Record(file)
。間違ったコードで record.method() を使用してファイルの SrcFile クラスのメソッドにアクセスできなかったため、試行錯誤してこれを発見しましたが、その理由はわかりません。
プログラミング全般、特に Python の経験が浅いことは明らかです。よろしくお願いします。