** 之后的参数必须是映射,而不是 ChatPermissions

رضا*_*یور 1 python python-telegram-bot

当我打印一个对象时:

print(permissions)
Run Code Online (Sandbox Code Playgroud)

它的输出如下:

{'can_send_messages': True, 'can_send_media_messages': True, 'can_send_polls': True, 'can_send_other_messages': True, 'can_add_web_page_previews': True, 'can_change_info': True, 'can_invite_users': True, 'can_pin_messages': True}
Run Code Online (Sandbox Code Playgroud)

与映射对象完全相同,但是当我尝试将其作为参数时,例如:

some_method(id, **permissions)
Run Code Online (Sandbox Code Playgroud)

它给出错误:

 argument after ** must be a mapping, not ChatPermissions
Run Code Online (Sandbox Code Playgroud)

有什么问题以及如何解决它?

kay*_*ya3 5

假设ChatPermissions是来自库的类telegram,那么你可以这样做:

some_method(id, **permissions.to_dict())
Run Code Online (Sandbox Code Playgroud)

一般来说,您还可以使用__dict__来获取对象属性的字典:

some_method(id, **permissions.__dict__)
Run Code Online (Sandbox Code Playgroud)

根据源代码,该to_dict方法本身使用__dict__,但排除了一些属性(bot以及以下划线开头的属性)。