Лучший способ вызвать методы класса из списка объектов класса - Python - PullRequest
1 голос
/ 29 января 2020

Я работал над Python Классами и обнаружил, что нельзя вызвать метод класса из объекта класса, просматривая список таких объектов. Ниже приведен пример кода:

def show_student_details(*s_list):
    for s in s_list:
        print("Roll Number: ", s.get_roll_no())
        print("Name: ", s.get_name())
        print("Phone: ", s.get_phone())
        print("Marks: ", s.get_marks())

Код для класса Student:

class Student:

    def __init__(self, roll_no=0, name="", phone="", marks=-1):
        self.__roll_no = roll_no
        self.__name = name
        self.__phone = phone
        self.__marks = marks

    def get_roll_no(self):
        return self.__roll_no

    def get_name(self):
        return self.__name

    def get_phone(self):
        return self.__phone

    def get_marks(self):
        return self.__marks

Запуск этого фрагмента кода путем передачи некоторых объектов класса Student приводит к следующей ошибке:

  File "main.py", line 88, in <module>
    show_student_details(students)
  File "main.py", line 12, in show_student_details
    print("Roll Number: ", s.get_roll_no())
AttributeError: 'list' object has no attribute 'get_roll_no'

Я понимаю, что List сам по себе является классом, а Python интерпретирует этот код так, как если бы я вызывал функцию get_roll_no() в List Object.

Я погуглил эту проблему и обнаружил, что map() и methodcaller() могут использоваться для вызова методов класса, но они не работают для меня.

Я знаю, что этот вопрос был несколько раз спрашивал о StackOverflow, но я думаю, что ни один из них не решил мою проблему: « вызов нескольких методов класса из объекта путем выбора объектов один за другим из списка объектов класса. '

Любая помощь будет оценена. Заранее спасибо.

1 Ответ

0 голосов
/ 29 января 2020

Предполагая, что вы передаете список студентов в функцию, такую ​​как ([<__main__.Student object at 0x122d85990>, <__main__.Student object at 0x122d85910>],) , вы можете использовать:

def show_student_details(*s_list):
for s in s_list[0]:
    print("Roll Number: ", s.get_roll_no())
    print("Name: ", s.get_name())
    print("Phone: ", s.get_phone())
    print("Marks: ", s.get_marks())

Поскольку * s_list преобразует ваши входные данные в список. Кроме того, вы можете просто использовать

def show_student_details(s_list):
for s in s_list:
    print("Roll Number: ", s.get_roll_no())
    print("Name: ", s.get_name())
    print("Phone: ", s.get_phone())
    print("Marks: ", s.get_marks())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...