列表不能在python中打印

时间:2018-06-03 08:31:00

标签: python python-3.x inheritance

我正在编写代码来理解继承,这是我到目前为止所做的。

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 :(得分:1)

您需要在学生班级中添加__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

答案 1 :(得分:0)

您正在打印对象本身,而不是属性。 要打印那些你必须通过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

(或者您希望输出看起来像。)

答案 2 :(得分:0)

有许多方法可以在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)打印出属性。