英文:
Duplicated items in classes when use .append or .insert (Python)
问题
我正在学习Python,通常也会执行一些非常简单的个人任务,以帮助我记住这门新语言。问题是,我遇到了一个我不太清楚出了什么问题的情况,也许有人可以解释一下。我在这方面是个新手,所以对于你来说可能很容易看出我的问题,但我已经费了好一阵子的脑筋,但我不明白问题出在哪里。
问题是,当我使用.insert
或.append
时,我在终端上收到了列表中的重复值。
这个代码相当简单:
class Student:
def __init__(self, name, surname, age):
Student.name = name
Student.surname = surname
Student.age = age
Student.subjects = [] # 可选属性,作为列表。
student001 = Student("Mary", "Stone", 17)
student002 = Student("James", "Lincoln", 16)
student001.subjects.append("English")
student002.subjects.append("English")
print(student001.subjects)
print(student002.subjects)
student001.subjects.append("P.E.")
student002.subjects.insert(1, "P.E.")
print(student001.subjects)
print(student002.subjects)
问题出在当我打印它时,终端上会收到重复的值:
['English', 'English']
['English', 'English']
['English', 'P.E.', 'English', 'P.E.']
['English', 'P.E.', 'English', 'P.E.']
有人可以解释一下我做错了什么吗?
提前谢谢!
我想收到这个输出:
['English']
['English']
['English', 'P.E.']
['English', 'P.E.']
英文:
I am learning Python and usually do really easy personal tasks too keep in my mind all this new language. The thing is, that I am having an issue that I don't really know what is wrong and maybe soomeone can explain. I am a noob in all this, so maybe for sou it is so easy to see my problem, but I've been breaking my brain for a while and I cannot understand what is wrong.
The thing is that I am receiving duplicated values on the terminal from a list when I .instert or .append them.
The code it's quite simple:
class Student:
def __init__(self, name, surname, age):
Student.name = name
Student.surname = surname
Student.age = age
Student.subjects = [] # Atributo no obligatorio en forma de LIST.
student001 = Student("Mary", "Stone", 17)
student002 = Student("James", "Lincoln", 16)
student001.subjects.append("English")
student002.subjects.append("English")
print(student001.subjects)
print(student002.subjects)
student001.subjects.append("P.E.")
student002.subjects.insert(1, "P.E.")
print(student001.subjects)
print(student002.subjects)
The problem is when I print it and I receive duplicated values on the terminal:
['English', 'English']
['English', 'English']
['English', 'P.E.', 'English', 'P.E.']
['English', 'P.E.', 'English', 'P.E.']
May anyone explain me what I am doing wrong?
Thanks in advence!
I want to receive this:
['English']
['English']
['English', 'P.E.']
['English', 'P.E.']
答案1
得分: 0
你正在定义类属性(所有实例共享),而不是实例属性,每个实例都是独特的。用self
替换Student
:
class Student:
def __init__(self, name, surname, age):
self.name = name
self.surname = surname
self.age = age
self.subjects = [] # Atributo no obligatorio en forma de LIST.
英文:
You are defining class attributes (shared by all instances) rather than instance attributes unique to each instance. Replace Student
with self
:
class Student:
def __init__(self, name, surname, age):
self.name = name
self.surname = surname
self.age = age
self.subjects = [] # Atributo no obligatorio en forma de LIST.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论