2015-01-15 27 views
0

Athlete類創建一個具有屬性的對象;名稱,TotalScore,平均數,偏差,機率 我將對象重命名爲玩家。而當我讀到這些行時,我希望我的類中的屬性發生改變,以便與文件中給出的信息相匹配。我已經讀了一些關於超類,但我不知道如何合併,在這種情況下使用是不正確的方法。我想這是創建看起來像這樣的選手對象:如何更改我班的屬性?

player.Name = Donald Duck 
player.TotalScore=0 
player.Average = 18 
player.Deviation = 2 
player.Chance = 0.16 

class Athlete(): 

    def __init_(self): 
     self.Name=name 
     self.TotalScore=0 
     self.Average=0 
     self.Deviation=0 
     self.Chance=0.0 


def PlayersFromFile(NameOfInputfile): 
    #define a list for player objects 
    PlayerList =[] 
    file = open(NameOfInputfile,'r') 
    lines = file.readlines() 
    for line in lines: 
     var1, var2, var3,var4 = line.split("\t") 
     var4 = float(var4.rstrip()) 
     player = Athlete 
     player.Name = var1 
     player.Average = float(var2) 
     player.Deviation = float(var3) 
     player.Chance =var4 
     playerList.append(player) 

這個文件看起來像:

Donald Duck 18 3 0.16 
The Bear 17 4 0.25 
Fair Brow 16 5 0.48 
+0

你不想重命名這個類,你想通過* calling * it - '''player = Athlete()'''創建一個類的實例。 – wwii

回答

1

索姆對文件的微小變化可能工作

class Athlete(): 
    def __init_(self, name=None): 
     self.Name=name 
     self.TotalScore=0 
     self.Average=0 
     self.Deviation=0 
     self.Chance=0.0 


def PlayersFromFile(NameOfInputfile): 
    #define a list for player objects 
    PlayerList =[] 
    file = open(NameOfInputfile,'r') 
    lines = file.readlines() 
    for line in lines: 
     var1, var2, var3,var4 = line.split("\t") 
     var4 = float(var4.rstrip()) 
     player = Athlete() 
     player.Name = var1 
     player.Average = float(var2) 
     player.Deviation = float(var3) 
     player.Chance =var4 
     playerList.append(player) 

請注意運動員分類中的名稱參數s在__init__函數和運動員調用時的雙括號創建播放器實例時。

0

無論屬性,它好像是self.Chancen是不是在文件中,你將有一個默認值:

class Athlete(): 
    def __init__(self,name, total_score=0, avg=0, dev=0, chnce=0.0): 
     self.name = name 
     self.total_score = total_score 
     self.average = avg 
     self.deviation = dev 
     self.chance = chnce 

def players_from_file(input_file): 
    player_list =[] 
    with open(input_file) as f: 
     for line in f: 
      name, score, avg, dev = line.split("\t") 
      dev = float(dev.rstrip()) 
      player_list.append(Athlete(name,float(score),float(avg), dev)) 
    return player_list 
player = players_from_file("in.csv") 
[<__main__.Athlete instance at 0x7f26194c5b00>, <__main__.Athlete instance at 0x7f26194c5ab8>, <__main__.Athlete instance at 0x7f26194c5bd8>] 


for player in players: 
    print(player.name,player.total_score) 
('Donald Duck', 18.0) 
('The Bear', 17.0) 
('Fair Brow', 16.0) 
0

您要定義PlayersFromFile方法內部PlayerList,這意味着一旦方法完成,它是無法訪問/刪除。

玩家是您正在另一個運動員實例中工作的運動員的實例,這很混亂。併爲玩家提供了很多創建不需要的新實例的方法。

使1個類具有玩家需要的屬性,然後爲每個玩家創建一個新的實例。

恐怕我不能回答這個問題了,而且建議您閱讀基本級別的命名空間和類。

編輯:錯過了運動員課程的錯誤實例,答案更正。