Py学习  »  Python

从类对象列表中调用类方法的更好方法-Python

Rohit Rawat • 5 年前 • 1516 次点击  

我在研究Python类时发现,不能通过循环遍历此类对象的列表来从类对象调用类方法。下面是示例代码:

def show_student_details(*s_list):
    for s in s_list:
        print("Roll Number: ", s.get_roll_no())
        print("Name: ", s.get_name())
        print("Phone: ", s.get_phone())
        print("Marks: ", s.get_marks())

学生班代码为:

class Student:

    def __init__(self, roll_no=0, name="", phone="", marks=-1):
        self.__roll_no = roll_no
        self.__name = name
        self.__phone = phone
        self.__marks = marks

    def get_roll_no(self):
        return self.__roll_no

    def get_name(self):
        return self.__name

    def get_phone(self):
        return self.__phone

    def get_marks(self):
        return self.__marks

通过传递Student类的一些对象运行这段代码会产生以下错误:

  File "main.py", line 88, in <module>
    show_student_details(students)
  File "main.py", line 12, in show_student_details
    print("Roll Number: ", s.get_roll_no())
AttributeError: 'list' object has no attribute 'get_roll_no'

我明白的是 List 它本身就是一个类,Python将此代码解释为我调用 get_roll_no() 列表对象上的函数。

我搜索了这个问题发现 map() methodcaller()

我知道这个问题在StackOverflow上被问了很多次,但是我认为没有一个问题解决了我的问题 通过从类对象列表中逐个选择对象,从对象中调用多个类方法。

任何帮助都将不胜感激。提前谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53816
 
1516 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Alireza Tajadod
Reply   •   1 楼
Alireza Tajadod    5 年前

假设您正在向函数传递一个学生列表,例如 ([<__main__.Student object at 0x122d85990>, <__main__.Student object at 0x122d85910>],) ,您可以使用:

def show_student_details(*s_list):
for s in s_list[0]:
    print("Roll Number: ", s.get_roll_no())
    print("Name: ", s.get_name())
    print("Phone: ", s.get_phone())
    print("Marks: ", s.get_marks())

因为*s\u list将您的输入转换为列表。或者,你应该可以使用

def show_student_details(s_list):
for s in s_list:
    print("Roll Number: ", s.get_roll_no())
    print("Name: ", s.get_name())
    print("Phone: ", s.get_phone())
    print("Marks: ", s.get_marks())