3

私はイベントを持っています、人々はイベントに所属することができます。だから私は次のようなイベントクラスを持っています:

class Event():
    name = ""
    people = []

すべてのイベントを保持するためのグローバル変数もあります

events   = []

今、私は生データをイベントとそれに行く人々に処理しようとしています:

    # If there are missions, add the events
    for m in wiki.missions:
        foundEvent = False
        for e in events:
            if e.name == m:
                foundEvent = True
                foundPerson = False
                for p in e.people:
                    if p.rawName == person.rawName:
                        foundPerson = True
                if not foundPerson:
                    e.people.append(person)
                    print "Added " + person.display + " to " + m + " (" + str(len(e.people)) + ")"

        if foundEvent == False:
            event = Event()
            event.name = m
            event.people.append(person)
            print "New " + person.display + " to " + m + " (" + str(len(event.people)) + ")"
            events.append(event)
            event = None

印刷されたステートメントに基づいて、既存のイベントに誰が追加され、いつ、誰が新しいイベントを作成するかを確認できます。奇妙なことに、イベントの人数は常にすべてのイベントの人数を増やします。

New Joseph M. Acaba to STS-119 (1)
New Joseph M. Acaba to Soyuz TMA-04M (2)
New Joseph M. Acaba to Expedition 31 Expedition 32 (3)
Added Dominic A. Antonelli to STS-119 (4)
New Dominic A. Antonelli to STS-132 (5)
Added Richard R. Arnold to STS-119 (6)

これは私には意味がありません、私が間違っていることよりも何ですか?(たくさんあると思います)

4

2 に答える 2

3

クラス変数の代わりにインスタンス変数を使用する必要があります。したがって、クラスを次のように設定し、残りのコードをそれに合わせて変更します。

class Event:
    def __init__(self, name):
        self.name = name
        self.people = []

ここでの重要な違いは、説明したとおりです。インスタンス変数はクラスの特定のインスタンスに設定されますが、クラス変数はそのクラスのすべてのインスタンスに設定されます。

于 2012-09-28T05:40:20.157 に答える
1

インスタンス変数ではなくクラス変数を作成しているため、作成する新しいオブジェクトごとに、クラスにユーザーを追加し続けます。

代わりにこれを試してください:

class Event():
    def __init__(self, name):
        self.name = ""
        self.people = []

以降

event = Event(m)
event.people.append(person)
于 2012-09-28T05:40:49.110 に答える