Py学习  »  Python

如何在函数python中调用类

bemzoo • 6 年前 • 1782 次点击  

我是一个完全的业余爱好者,正在努力研究如何编写一个函数,该函数接受一个对象列表,并返回一个所述对象的名称列表(基于它们是否传递if语句)。这是我在教程帮助下编写的课程:

class Student:  
passmark=50  

def __init__(self,name,mark):  
    self.name=name  
    self.mark=mark  

def passes(self):  
    return self.mark > Student.passmark 

所以从现在开始,我假设我列了一个对象列表,比如:

students = []  

虽然这个列表只是一个全新的列表,这是必要的,但我如何将它链接到类?从这一点上,我想找出哪些学生失败了,并把他们还给我,还有我困惑的地方:

def failed(list):  
    for student in Students:  
        if passmark > self.mark:  
            return list  

我只能说,对不起,我刚去上课,上课对我来说很混乱。上面的代码根本没有引用类,我真的很困惑如何这样做。我没有语法错误,我想我的逻辑有致命的缺陷。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40054
文章 [ 6 ]  |  最新文章 6 年前
Andreina
Reply   •   1 楼
Andreina    7 年前

我认为失败不是班级学生的一个成员函数。下面的代码应该适用于您要做的事情。

class Student:
    passmark=50
    def __init__(self,name,mark):
        self.name=name
        self.mark=mark  

    def passes(self):  
         return self.mark > Student.passmark

students = [Student("tom",40),Student("joe",70)]

def failed(listofStudents):
    listofStudentsThatFail = []
    for student in listofStudents:
        if not student.passes():
            listofStudentsThatFail.append(student)
    return listofStudentsThatFail

for s in failed(students):
    print s.name

运行代码时输出为: 汤姆

turtlesallday
Reply   •   2 楼
turtlesallday    7 年前
mark_to_pass = 50

#Approach one
class Student:
    def __init__(self, student_name, student_mark):
        self.name = student_name
        self.mark = student_mark
        self.pass_mark = self.calculate_passing_mark(mark_to_pass)

    def calculate_passing_mark(self, mark_to_pass):
        if self.mark >= mark_to_pass:
            return True
        return False

if __name__ == '__main__':
    example_student = Student("Swanson", 75)
    print(example_student.pass_mark)

使用这种方法,每次创建一个student对象时,它都会告诉create一个字段,告诉您student已经通过了。在处理学生对象列表等列表时,需要将学生添加到列表中。例子

students = []
students.append(example_student)

现在你可以通过

for student in students:
   print(student.pass_mark) # or do some other logic passed on who passed or failed. Or even here you dont need to create pass_mark object you can just check if student.mark > pass_mark
Hal Jarrett
Reply   •   3 楼
Hal Jarrett    7 年前

给予 Student 你定义的类:

class Student:  
    passmark=50  

    def __init__(self,name,mark):  
        self.name=name  
        self.mark=mark  

    def passes(self):  
        return self.mark > Student.passmark 

您可以使用以下命令实例化学生列表:

students = [Student("John", 49), Student("Mary", 75)]

看起来您还试图定义一个函数,该函数将返回所有失败学生的列表;您可以执行以下操作:

def failed(student_list):
    return [x for x in student_list if not x.passes()]
AResem
Reply   •   4 楼
AResem    7 年前

试试这个代码。使用列表理解返回结果。它是一个非常强大的python工具。

class Student:  
    passmark = 50
    def __init__(self, name, mark):  
        self.name=name  
        self.mark=mark  

    def passes(self):  
        return self.mark > Student.passmark 

    def __repr__(self):
        return '{} {}'.format(self.name, self.mark)


def failed(students_list):  
    return [student for student in students_list if student.mark < Student.passmark]
handras
Reply   •   5 楼
handras    7 年前

你想把学生名单上的所有学生都带走。所以在for循环中使用它。另外,您在方法中正确地封装了通过/失败标准的逻辑,因此请使用它。

我想这是你想要的代码:

def failed(list_of_students):
   failed_students = []
   for student in list_of_students:  
       if not student.passes():  
           failed_students.append(student.name)  
   return failed_students

更高级的方法是使用列表理解:

def failed(list_of_students):
    return [student for student in list_of_students if not student.passes()]

它更具Pythic,但对于C语言或Java背景的初学者来说,我更难理解。

blhsing
Reply   •   6 楼
blhsing    7 年前

您可以使用这样的列表理解:

def failed(list):
    return [student.name for student in students if not student.passes()]