Доступ к элементу в списке классов - PullRequest
0 голосов
/ 03 ноября 2019

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

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() для возврата всех назначений, я могу это сделать, но когда я использую get_assignment для распечатки имени одного назначения, я продолжаю возвращать None, как если бы назначение нене существуетЯ думаю, проблема в том, как я определяю get_assignment(self, name), но не могу понять, что это такое.

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Вы не можете просто проверить включение с помощью 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-й элемент каждого и возвращает True, когда находит, или False, если нет.

0 голосов
/ 03 ноября 2019

Проблема здесь не в классах. Это то, что вы пытаетесь найти строку в списке кортежей.

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. Вы не хотите определять id или name на уровне класса. Прочитайте этот вопрос , чтобы узнать больше.

...