【问题标题】:Getting problem in python list of objects?在 python 对象列表中遇到问题?
【发布时间】:2020-01-15 01:10:30
【问题描述】:

我需要在 Python 中执行一些 CRUD 操作。

我使用了以下详细信息。我已经捕获了一些用户详细信息并将它们添加到一个列表中,我正在打印该列表,我只得到最后插入的行。

from pprint import pprint


class Institute:
    studentID = int();
    studentName=str();
    trinerName=str();

my_list = []

my_obj = Institute()
my_obj.studentID = 100;
my_obj.studentName = "Student 1";
my_obj.trinerName = "Trainer 1";

my_list.append(my_obj)


my_obj.studentID = 101; 
my_obj.studentName = "Student 2";
my_obj.trinerName = "Trainer 2";

my_list.append(my_obj)


newobj = vars(my_obj);

print(newobj);  

这给了我

{'studentID': 101, 'studentName': 'Student 2', 'trinerName': 'Trainer 2'}                                                             

但我想显示所有添加的对象。

【问题讨论】:

    标签: python list


    【解决方案1】:

    您对列表的每个元素使用相同的对象。每次都需要创建一个新对象。

    最后你需要打印整个列表,而不仅仅是最后一个对象。

    from pprint import pprint
    class Institute:
        studentID = int();
        studentName=str();
        trinerName=str();
    
    my_list = []
    
    my_obj = Institute()
    my_obj.studentID = 100;
    my_obj.studentName = "Student 1";
    my_obj.trinerName = "Trainer 1";
    
    my_list.append(my_obj)
    
    my_obj = Institute()
    my_obj.studentID = 101; 
    my_obj.studentName = "Student 2";
    my_obj.trinerName = "Trainer 2";
    
    my_list.append(my_obj)
    
    newobj = list(map(vars, my_list))
    
    print(newobj);
    

    【讨论】:

    • 感谢您的回答,如果我想更新一些 StudentId 的数据,您能告诉我一件事吗?让 studentID = 101 我想更新一些值,在上述情况下如何获取它的索引它是 1。我怎样才能动态地得到它?
    【解决方案2】:

    在您的情况下,使用实例变量比使用类变量更干净。

    实例变量是用于特定实例唯一的数据的变量。

    类变量是类的所有实例共享的变量。

    from pprint import pprint
    class Institute:
        def __init__(self, studentID, studentName, trinerName):
            self.studentID = studentID
            self.studentName = studentName
            self.trinerName = trinerName
    
    my_list = []
    
    my_obj = Institute(100, "Student 1", "Trainer 1")
    my_list.append(my_obj)
    
    my_obj = Institute(101, "Student 2", "Trainer 2")
    my_list.append(my_obj)
    
    
    all_new_obj = list(map(vars, my_list))
    
    pprint(all_new_obj)
    

    输出:

    [{'studentID': 100, 'studentName': 'Student 1', 'trinerName': 'Trainer 1'},
     {'studentID': 101, 'studentName': 'Student 2', 'trinerName': 'Trainer 2'}]
    

    【讨论】:

    • 感谢您的回答,如果我想更新一些 StudentId 的数据,您能告诉我一件事吗?让 studentID = 101 我想更新一些值,在上述情况下如何获取它的索引它是 1。我怎样才能动态地得到它?
    • 所以你想要类似: Institute.get(studentid=1) 而不是修改 trinerName ?