繁体   English   中英

如何更改班级的属性?

[英]How can I change the attributes of my class?

类运动员创建具有属性的对象; 名称,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

对文件进行Som细微更改可能会起作用

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)

请注意,在创建运动员实例时, __init__函数上的Athlete类中的name参数以及Athlete调用中的双括号。

无论看起来像是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)

您正在PlayersFromFile方法中定义PlayerList,这意味着该方法完成后将无法访问/删除。

玩家是您正在处理的另一个运动员实例的一个实例,这很混乱。 并为玩家提供了许多创建不需要的新实例的方法。

制作一个具有玩家需要的属性的类,然后为每个玩家创建一个新的实例。

恐怕我不能再回答这个问题了,建议您在基本级别上阅读名称空间和类。

编辑:错过了运动员课程的错误实例化,答案已更正。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM