社区所有版块导航
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

Rohit Rawat • 5 年前 • 1508 次点击  

我在研究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
 
1508 次点击  
文章 [ 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())