[英]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.