Как я могу спасти Билла Гейтса и отметить Цукерберга в lis?
Когда я пишу в седонд, первый теряется
class student:
def __init__(self,name,surname):
self.name=name
self.surname=surname
def studen(self):
lis=[]
lis.extend([self.name,self.surname])
return lis
a=student("Bill","gates")
a=student("Mark","zuckerberg")
print(a.studen())
результат:
['Mark', 'zuckerberg']
я хочу:
['Mark', 'zuckerberg', 'bill', 'gates']
Вам, вероятно, понадобится class Student
и class Students
для представления набора Student
:
Может быть, что-то вроде этого:
class Student:
def __init__(self, name, surname):
self.name = name
self.surname = surname
def __str__(self):
return f'{self.name}, {self.surname}'
def __repr__(self):
return str(self)
class Students:
def __init__(self, seq):
self._students = seq[:]
def append(self, student):
self._students.append(student)
def __str__(self):
return '\n'.join(str(student) for student in self._students)
if __name__ == '__main__':
bill = Student("Bill", "Gates")
mark = Student("Mark", "Zuckerberg")
students = Students([mark, bill])
print(students)
Mark, Zuckerberg
Bill, Gates
Вы также можете создать подкласс list
или какой-либо базовый класс из модуля collections
; Проще говоря, вы также можете использовать простой список Python для хранения ваших экземпляров Student
:
class Student:
def __init__(self, name, surname):
self.name = name
self.surname = surname
def __str__(self):
return f'{self.name} {self.surname}'
def __repr__(self):
return str(self)
if __name__ == '__main__':
bill = Student("Bill", "Gates")
mark = Student("Mark", "Zuckerberg")
students = [mark, bill]
print(students)
[Mark Zuckerberg, Bill Gates]
Не может произойти в одном экземпляре? Только в а или только в б? –
Понятия не имею, что вы имеете в виду; не могли бы вы быть более конкретным?
Сделайте lis
атрибутом экземпляра. То, как вы это делаете, переопределяет экземпляр a
, поэтому предыдущее значение теряется.
Ты можешь сделать:
class student:
def __init__(self,name,surname):
self.name = name
self.surname = surname
self.lis = [self.name, self.surname]
def studen(self):
return self.lis
a = student("Bill", "gates")
b = student("Mark", "zuckerberg")
print(a.studen() + b.studen())
# ['Bill', 'gates', 'Mark', 'zuckerberg']
Не может произойти в одном экземпляре? Только в а или только в б?
@koki, я объяснил, почему использование одного экземпляра не работает в моем ответе.
Похоже, вы хотите, чтобы
student
представлял одного ученика со свойствамиname
иsurname
. Но вы также хотите список, это плохой дизайн. У вас должен быть отдельный список учеников, который содержитstudent
экземпляров.