2013-10-13 44 views
0

无论是这个问题的答案会工作,或者我读过你不需要对它进行命名...所以我想这:如何使用python在循环内创建具有不同名称的对象?

class Entry(): 
    __slots__ = ('name', 'gender', 'occurances') 

def mkEntry(name_foo, gender_foo, occurances_foo): 
    myEntry = Entry 
    myEntry.name = name_foo 
    myEntry.gender = gender_foo 
    myEntry.occurances = occurances_foo 
    return myEntry 

def topTwenty(fileName): 
    file = open(fileName) 
    topTwenty = [] 
    femaleCount = 0 
    maleCount = 0 
    for line in file: 
     a = line.split(",") 
     if a[1] == 'F' and femaleCount < 20: 
      topTwenty.append(mkEntry(a[0], a[1], a[2])) 
      femaleCount = femaleCount + 1 
    print(topTwenty[7].name) 

但打印(topTwenty [7]。名称)正在打印我期望topTwenty [20]。名称

有什么帮助吗?

+0

[很多的问题](http://stackoverflow.com/search?q=%5Bpython%5D__slots__+%3D+%28%27name%27%2C+%27gender%27%2C+%27occurances%27%29)上这个话题显示出来。 – wwii

回答

1

您需要做myEntry = Entry()来创建该类的一个实例。现在你只是每次覆盖同一个类的属性,并且每次将同一个类添加到列表中。您的列表只包含20次相同的项目。

无论如何,这是一种奇怪的做事方式。为什么不把代码从mkEntry移动到Entry类的__init__上,以保持初始化与类一起。

+0

谢谢。我正在使用mkEntry,因为我介绍的是cs类,但我们还没有学习__init__,所以我们现在还不能使用它。 – user2827580

相关问题