Список не печатается в Python - PullRequest
0 голосов
/ 03 июня 2018

Я пишу код, чтобы понять наследование, и вот что я сделал до сих пор.

class Master:

    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name
        self.full_name = first_name + last_name
        self.email_id = (first_name + last_name + '@vit.com').lower()

class Student(Master):

    def __init__(self, first_name, last_name, reg_num):
        super().__init__(first_name, last_name)
        self.reg_num = reg_num

    def __str__(self):
        return self.first_name + " " + self.last_name

class Proctor(Master):

    def __init__(self, first_name, last_name, students=None):
        super().__init__(first_name, last_name)
        if students is None:
            self.students = []
        else:
            self.students = students


stud_1 = Student('kishan', 'B', '16BEI0067')
proctor_1 = Proctor('Mani', 'Mozhi', [stud_1])

print(proctor_1.students)

Когда последний оператор печати оправдывается, вместо получения подробностей stud_1 , Я получаю [<__ main __. Студенческий объект по адресу 0x7f362206a908>]

Что идет не так?

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вы печатаете сам объект, а не атрибуты.Чтобы распечатать их, вы должны либо пройти по списку с помощью цикла for и вызвать атрибуты следующим образом:

for s in proctor_1.students:
    print(s.first_name, s.last_name)  # and so on

Или вы можете реализовать метод __str__ dunder:

def __str__(self):
    return s.first_name + " " + s.last_name

(или как вы хотите, чтобы результат выглядел так.)

0 голосов
/ 03 июня 2018

Есть несколько способов, которыми вы можете напечатать атрибуты объекта в Python.Вот еще один способ.Это напечатает атрибуты объекта:

for attr in dir(proctor_1):
    if hasattr(proctor_1, attr):
        print("proctor_1.%s = %s" % (attr, getattr(proctor_1, attr)))

Вы также можете обернуть это в функцию dump и затем вызвать dump(obj), чтобы распечатать атрибуты.

0 голосов
/ 03 июня 2018

Вам нужно добавить метод __str__() в ваш класс ученика, чтобы указать, как его следует печатать:

class Student(Master):
    def __init__(self, first_name, last_name, reg_num):
        super().__init__(first_name, last_name)
        self.reg_num = reg_num

    def __str__(self):
        return self.first_name + " " + self.last_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...