Python如何通过自定义read()函数输出Playlists类的所有实例内容
Python代码功能修正方案
现存核心问题梳理
add()函数内创建的Playlist实例列表为局部变量,没有通过返回值对外暴露,其他函数无法访问Playlists实例化时的参数顺序和类定义的__init__方法参数不匹配,导致属性赋值错位read()中直接调用类本身的__str__()方法,没有绑定具体类实例,会触发参数缺失报错read()中的打印语句直接引用未定义的裸变量,没有从实例上读取对应属性值,会触发NameError- 代码中存在命名冲突(用内置类型名
list做变量名)、拼写错误(把Name写为Mame)、字符串断行导致的输出截断问题
分步修正代码
1. 调整library/items.py的类定义
修正原代码中__str__方法的断行问题,保证输出字符串完整:
class Playlists: def __init__(self, playlist_name, playlist_id, track_id): self.playlist_name = playlist_name self.playlist_id = playlist_id self.track_id = track_id def __str__(self): return f'Playlist Name: {self.playlist_name}, Playlist ID: {self.playlist_id}, Track ID: {self.track_id}'
2. 重写test.py中的add()函数
修正参数传值顺序,将构造完成的实例列表通过返回值对外暴露,同时避开和内置类型重名的变量:
from library.items import Playlists def add(): playlist_list = [] # 按__init__定义的参数顺序(playlist_name, playlist_id, track_id)传值,避免属性错位 playlist_list.append(Playlists('Auto', '24SHqUZy0WCV5xr0rf8lKq', '3AzjcOeAmA57TIOr9zF1ZW')) playlist_list.append(Playlists('Auto', '24SHqUZy0WCV5xr0rf8lKq', '45bE4HXI0AwGZXfZtMp8JR')) playlist_list.append(Playlists('Auto2', '7jA9b083jD5GTejPovTVX9', '5gJ7XTF7e0shYzCOAfwsIz')) playlist_list.append(Playlists('Auto2', '7jA9b083jD5GTejPovTVX9', '1K3MWIZ1wuy6HjDLo63ZgT')) playlist_list.append(Playlists('Auto2', '7jA9b083jD5GTejPovTVX9', '5uKgxudNcssSnULVAkpkwI')) playlist_list.append(Playlists('Auto3', '6Z7CHHGD33XtVjLJ3WFIiW', '0sjSgTluUJIdqfyRe4EQ4U')) playlist_list.append(Playlists('Auto3', '6Z7CHHGD33XtVjLJ3WFIiW', '2TfcMUAZ4vH4fTA9eF53v2')) playlist_list.append(Playlists('Auto3', '6Z7CHHGD33XtVjLJ3WFIiW', '0YOUE1TlkgSbkNvWkZkEVp')) playlist_list.append(Playlists('Auto3', '6Z7CHHGD33XtVjLJ3WFIiW', '3AKm9sJmK0v3wUQYSLuze7')) return playlist_list
3. 重写test.py中的read()函数
接收传入的实例列表,循环遍历所有实例输出内容,修正拼写错误:
def read(playlist_list): for idx, playlist in enumerate(playlist_list, 1): # 直接打印实例对象,Python会自动触发类定义的__str__方法输出格式化内容 print(f"第{idx}条记录:{playlist}")
4. 调整test.py中的main()函数逻辑
将add()返回的实例列表传递给read()完成输出,打通函数间的数据传递链路:
def main(): all_playlists = add() read(all_playlists) if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者AK5ttz
相关产品推荐
相关产品推荐

