python程序重载了“ ==”运算符,以打印具有相同分数的学生的详细信息

时间:2019-01-30 17:42:15

标签: python operator-overloading

在这里,我必须创建一个具有以下成员属性的班级学生:卷号,姓名,年龄和总分。创建用于读取和打印成员变量的合适方法,并使“ ==”运算符重载以打印具有相同分数的学生的详细信息。在这里,我找不到方法如何重载==运算符来标记。这里我有错误。

class Student():


    def __init__(self,r_no,name,age,marks):
        self.r_no = r_no
        self.name = name
        self.age = age
        self.marks = marks


    def displayStudent(self):
        print ("Roll no : ", self.r_no, "Name : ", self.name,  ", Age: ", self.age,  ", Marks: ", self.marks)


    def __str__(self):
        return "({0},{1},{3},{4})".format(self.r_no,self.name,self.age,self.marks)

    def __eq__(self,other):
        if(self.marks==other.marks):
            return self.marks==other.marks


stu = []

for i in range (1,3):
    print("Enter Details for Students %d" % (i))
    r_no = int(input("Enter Roll no:"))
    name = input("Enter Name:")
    age = int(input("Enter Age:"))
    marks = input("Enter Marks:")
    stu.append(Student(r_no,name,age,marks))



for s in stu:
    s.displayStudent()

2 个答案:

答案 0 :(得分:0)

要报告两个学生都等于给定它们具有__eq__函数应该是这样的相同的标记:

def __eq__(self, other):
    return self.marks == other.marks

它返回True,如果标记是相同的,并且False,否则

然后此代码分别返回TrueFalse

print(Student(1, 'test1', 20, 4) == Student(2, 'test2', 30, 4))  # True
print(Student(3, 'test3', 0, 1) == Student(3, 'test3', 0, 2))  # False

答案 1 :(得分:0)

Code screenshot

您需要使用def __eq__条件来代替if,例如

if(stu[0].marks==stu[1].marks):
      print("marks of ",stu[0].name,"&",stu[1].name," is same")
else:
      print("not same")

或者,如果您的数据量不止两个学生,那么也可以使用for循环。有关更多详细信息,请查看我在此处顶部链接的图像。