访问 class 列表中的项目

Access item in class list

我正在尝试使用以下代码确定列表中元组中的第一项是否存在于分配列表中。

class Students:
    id = int()
    full_name = ""
    assignments = [("Assign_1", 4), ("Assign_2", 10)]

    def __init__(self, id, full_name):
        self.id = int(id)
        self.full_name = full_name

    def get_name(self):
        print(self.full_name)
    def get_assignments(self):
        print(self.assignments)
    def get_assignment(self, name):
        if name in self.assignments:
            return name
        else:
            return None

Becky = Students(123, "Becky S")
Becky.get_assignments()
print(Becky.get_assignment("Assign_1"))

我包含了比必要更多的代码,只是为了说明这个概念。当我使用 get_assignments() 方法对 return 所有赋值时,我能够这样做,但是当我使用 get_assignment 打印出单个赋值的名称时,我保留 returning None,就好像赋值不存在一样。我认为问题在于我如何定义 get_assignment(self, name),但无法弄清楚它是什么。

您不能只检查 in 是否包含在内,因为该字符串不是列表的元素 — 列表包含元组。您检查作业中的 any 是否有一个等于 name 的第一个成员,例如:

def get_assignment(self, name):
    if any(assignment[0] == name for assignment in self.assignments):
        return name
    else:
        return None

这将查看分配并将 name 与每个元素的第 0 个元素进行比较,如果找到则 return TrueFalse 如果没有.

这里的问题与 classes 无关。这是你试图在元组列表中搜索字符串。

self.assignments[("Assign_1", 4), ("Assign_2", 10)]。也就是说,列表中的每个元素都是 (name, id) 的元组。当您执行 in 时,Python 会将参数与列表的每个元素进行比较。但是 "Assign_1" 永远不会等于 ("Assign_1", 4).

相反,您需要遍历列表并检查名称是否在任何元素中:

if any(assignment[0] == name for assignment in self.assignments)

另请注意,您对 Python classes 的理解存在一些问题。您不想在 class 级别定义 idname。阅读 this question 了解更多。