Создайте список экземпляров и список переменных каждого экземпляра - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь составить список экземпляров одного класса, каждый с разными значениями атрибутов, используя этот код:

lines_stripped = ['Name', 'Age', 'Score', 'John Whorfin', '52', '1.553', 'John Emdall', '35', '1.21', 'John Parker', '41', '1.987', 'John Gomez', '33', '1.305', 'John Yaya', '41', '1.411', 'John Gant', '39', '1.6821']
header = lines_stripped[0:3]
lines_stripped = lines_stripped[3:] 

class Lectroid():

    def __init__ (self, Name, Age, Score):

        self.name = Name
        self.age = Age
        self.score = Score


lectroidNames = range(0,6)  
#lectroidNames = lectroidNames.append('Lectroid')
i = 0
j = 1
k = 2
x = 0
while x < 6:
    lectroidNames[x] = Lectroid(lines_stripped[0], lines_stripped[1], lines_stripped[2]) #How can I not have constantly overriding lectroids
    i += 3
    j += 3
    k += 3
    x += 1

Я собирался сделать каждый экземпляр именованным по номеру (отсюда lectroidNames = range(0,6)) но когда я print lectroidNames я не получаю список чисел или список экземпляров. Это вывод из print lectroidNames

[<__main__.Lectroid instance at 0x1085ad050>, <__main__.Lectroid instance at 0x1085ad098>, <__main__.Lectroid instance at 0x1085ad0e0>, <__main__.Lectroid instance at 0x1085ad128>, <__main__.Lectroid instance at 0x1085ad170>, <__main__.Lectroid instance at 0x1085ad1b8>]

Я хочу составить список оценок для каждого экземпляра. Я попытался сделать это, используя print lectroidNames.score, но я получил это сообщение об ошибке: AttributeError: 'list' object has no attribute 'score'

Почему я получаю это сообщение об ошибке, когда каждый экземпляр имеет оценку атрибута? Как я могу получить список результатов для каждого экземпляра?

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Вы можете сделать что-то вроде,

$ cat make.py
lines_stripped = ['Name', 'Age', 'Score', 'John Whorfin', '52', '1.553', 'John Emdall', '35', '1.21', 'John Parker', '41', '1.987', 'John Gomez', '33', '1.305', 'John Yaya', '41', '1.411', 'John Gant', '39', '1.6821']
header = lines_stripped[0:3]
lines_stripped = lines_stripped[3:] 

class Lectroid():
        def __init__ (self, name, age, score):
                self.name = name
                self.age = age
                self.score = score


instances = []
data = iter(lines_stripped)
for _ in range(int(len(lines_stripped) / len(header))):
    name, age, score = [next(data) for _ in range(len(header)]
    instances.append(Lectroid(name, age, score))

for instance in instances:
    print(instance.name, instance.age, instance.score)

Вывод:

$ python make.py
('John Whorfin', '52', '1.553')
('John Emdall', '35', '1.21')
('John Parker', '41', '1.987')
('John Gomez', '33', '1.305')
('John Yaya', '41', '1.411')
('John Gant', '39', '1.6821')
0 голосов
/ 04 октября 2019

вы можете определить пустой список и добавить:

lectroidNames =[]

i = 0
j = 1
k = 2
x = 0
while x < 6:
    lectroidNames.append(Lectroid(lines_stripped[i], lines_stripped[j], lines_stripped[k])) 
    i += 3
    j += 3
    k += 3
    x += 1

вывод на печать:

print(lectroidNames[0].name)
print(lectroidNames[1].name)

результат:

John Whorfin
John Emdall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...