0

初心者の質問で申し訳ありませんが、クラスを扱うのはこれが初めてです。私が作成しようとしているクラスは、辞書内のすべてのキーと値に対して正規表現の検索と置換を実行することを目的としています。特定の検索と置換は、インスタンス化時に定義されます。

私が持っている2つの問題があります。最初の問題は、クラスの各インスタンスが新しい辞書を受け入れる必要があることです。インスタンスの作成時に指定できる一般的な辞書を受け入れるクラスを作成する方法がわかりません。2 番目の問題は、私が持っているクラスが機能していないことです。TypeError: expected string or bufferクラス行にエラー メッセージが表示されますv = re.sub(self.find,self.replace,v)

入力辞書ごとに 1 つずつ、作成する 3 つのインスタンスがあります: input_iter1input_iter2、およびinput_iter3

クラスは次のとおりです。

class findreplace:
    values = []
    keys = []
    def __init__(self, find, replace):
        self.find = find
        self.replace = replace
    def value(self):
        for k,v in input_iter1.items():
            v = re.sub(self.find,self.replace,v)
            findreplace.values.append(v)
    def key(self):
        for k,v in input_iter1.items():
            k = re.sub(self.find,self.replace,k)
            findreplace.keys.append(k)

以下にインスタンスを示します。

values1 = findreplace('[)?:(]','')
values1.value()
values2 = findreplace(r'(,\s)(,\s)(\d{5})({e<=1})',r'\2\3')
values2.value()
keys1 = findreplace(r'(?<=^)(.+)(?=$)',r'(?:\1)')
keys1.key()
keys2 = findreplace(r'(?=$)',r'{e}')
keys2.key()

print values
print keys

これら 2 つの問題を回避する方法について何か洞察をお持ちの方がいらっしゃいましたら、お聞かせいただければ幸いです。ありがとう!

4

2 に答える 2

2

まず、Python2クラスは次のように開始する必要があります。

class Foo(object):

そうでなければ、あなたは「古いスタイルのクラス」を取得します。これは、誰も使用しない古代の無愛想なものです。

また、Pythonのクラス名は通常、で記述されCamelCaseます。

次に、ここでandを使用しているように、クラス属性として可変値(リストなど)を使用しないでください。それらはクラスのすべてのインスタンスで共有されます!直接参照しているので、これに気付いているように見えますが、インスタンス固有の値をそのようなクラス属性に格納することは意味がありません。keysvaluesfindreplace.keys

しかし、最も重要なのは、なぜこれがクラスなのかということです。は何をfindreplace 表していますか?これが単一の関数である場合、これははるかに明確になるように見えます。


実際の質問に答えるには:

  1. とを渡すのと同じように、辞書を渡しfindますreplace。に別の引数を追加し__init__、クラスを作成するときに別の引数を渡します。

  2. おそらく、TypeErrorディクショナリの値の1つが文字列ではなく、文字列に対してのみ正規表現を実行できるため、取得しています。

于 2013-01-21T05:11:50.933 に答える
1

input_iter dictsの定義はどこにありますか?彼らはどのように見えますか?エラーは、dictの値が文字列ではないことを示しています。

于 2013-01-21T05:10:38.917 に答える