1

私はPythonにかなり慣れていません。クラスを定義しようとしましたが、ファイルからインスタンスを作成し、その特定の部分を参照したいのですが、できないようです。これは Python 3.3.0 です

これがクラスです....

class Teams():

    def __init__(self, ID = None, Team = None, R = None, W = None, L = None):
        self._items = [ [] for i in range(5) ]
        self.Count = 0


    def addTeam(self, ID, Team, R=None, W = 0, L = 0):
        self._items[0].append(ID)
        self._items[1].append(Team)
        self._items[2].append(R)
        self._items[3].append(W)
        self._items[4].append(L)
        self.Count += 1

    def addTeamsFromFile(self, filename):
        inputFile = open(filename, 'r')
        for line in inputFile:
            words = line.split(',')
            self.addTeam(words[0], words[1], words[2], words[3], words[4])

    def __len__(self):
        return self.Count

メインのコードは次のとおりです

startFileName = 'file_test.txt'
filename = startFileName

###########
myTestData = Teams()

myTestData.addTeamsFromFile(startFileName)

ファイル内のサンプルデータ

100,AAAA,106,5,0
200,BBBB,88,3,2
300,CCCC,45,1,4
400,DDDD,67,3,2
500,EEEE,90,4,1

ここまでは大丈夫だと思います (100% 確実ではありません) が、このデータを参照して確認するにはどうすればよいでしょうか... クラスを正しく作成していませんか? あるインスタンスが別のインスタンスよりも大きいかどうかを確認するにはどうすればよいですか...

つまり、myTestData[2][2] > myTestData[3][2]<----- これが機能しないため、ここで混乱します。

4

2 に答える 2

1

Teamこのようなクラスを作成してみませんか:

class Team():
    def __init__(self, ID, Team, R=None, W = 0, L = 0)
      # set up fields here

その後、Teams

class Teams():
   def __init__(self):
       self._teams = []
   def addTeam (self, ID, Team, R=None, W = 0, L = 0)
       team = Team (ID, Team, R=None, W = 0, L = 0)
       self._teams.append (team)

今、私がそれを正しく理解した場合、あなたは>オペレーターの行動を上書きしたいと思います。

その過負荷を行うには__gt__(self, other) [リンク]

だからそれは

class Team ():
   # init code from above for Team

    def __gt__ (self, otherTeam):
        return self.ID > otherTeam.ID # for example

また、数値ではなく文字列を比較するため、これらの文字列を必ず数値に変換してください。intそのための関数を使用します。

于 2012-12-09T15:43:17.717 に答える
0

あなたが直面している差し迫った問題は、チーム データにアクセスするためのコードが、myTestData値がリストではなくオブジェクトであることを考慮していないことです。次のようにして修正できます。

myTestData._items[2][2] > myTestData._items[3][2]

ただし、それほど多くのことを計画している場合は、_items明らかに公開されるはずの名前に変更することをお勧めします. addTeamsFromFileメソッドに値を渡す前に、メソッドが読み取った値の一部を (文字列として残すのではなく) 整数に変換するようにすることもできaddTeamます。

Teams別の方法は、クラスが直接メンバー アクセスをサポートするようにすることです。という名前のメソッドを作成することでそれを行うことができます__getitem____setitem__値を直接代入できるようにしたい場合)。何かのようなもの:

def __getitem__(self, index):
    return self._items[index]

チームデータ項目のクラスの作成に関する@Aleksandarの回答も良いものです。実際、複数のチームを含むクラスを作成するよりも、個々のチーム用のクラスを作成する方が便利な場合があります。TeamsクラスをTeamインスタンスのリストに置き換えることができます。それはあなたがそれで何をしようとしているのかに依存します。

于 2012-12-09T16:18:54.410 に答える