簡體   English   中英

從類對象列表調用類方法的更好方法 - Python

[英]A better way to call Class Methods from List of Class Objects - Python

我正在研究 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())

Student 類的代碼是:

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 解釋這段代碼就像我在 List 對象上調用get_roll_no()函數一樣。

我在 google 上搜索了這個問題,發現map()methodcaller()可用於調用類方法,但它們對我不起作用。

我知道這個問題在 StackOverflow 上被問過多次,但我認為他們都沒有解決我的問題,即“通過從類對象列表中一個一個地選擇對象來從對象調用多個類方法。 '

任何幫助將不勝感激。 提前致謝。

假設您將學生列表傳遞給函數,例如([<__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_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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM