社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在函数python中调用类

bemzoo • 4 年前 • 823 次点击  

我是一个完全的业余爱好者,正在努力研究如何编写一个函数,该函数接受一个对象列表,并返回一个所述对象的名称列表(基于它们是否传递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
 
823 次点击  
文章 [ 6 ]  |  最新文章 4 年前
Andreina
Reply   •   1 楼
Andreina    5 年前

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

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    5 年前
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    5 年前

给予 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    5 年前

试试这个代码。使用列表理解返回结果。它是一个非常强大的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    5 年前

你想把学生名单上的所有学生都带走。所以在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    5 年前

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

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