Python开发Discord Bot调用cogs下blackjack类构造函数报错
问题根源
你遇到的报错module 'cogs' has no attribute 'blackjack'是Python包导入规则不匹配导致的,和异步方法实例化对象无关,你的__init__参数也没有问题。
解决步骤
- 首先在
cogs目录下新增一个空的__init__.py文件,这个文件是Python将目录识别为合法包的必要标记,没有的话无法通过包路径导入子文件。 - 然后在
casino.py的头部添加正确的导入语句,因为casino.py和blackjack.py在同一个包下,推荐用相对导入:
如果你习惯用绝对导入,只要运行入口是根目录的# 直接导入目标类,写法最简洁 from .blackjack import BlackjackGamebot.py,也可以写:from cogs.blackjack import BlackjackGame - 最后修改实例化代码行,不需要写全
cogs.blackjack.前缀,直接调用导入的类即可:game = BlackjackGame(self.bot, pCtx.message, int(amount))
疑问解答
- 异步方法中可以正常同步创建对象,只要类的
__init__方法里没有异步逻辑就不需要用asyncio包装,你的场景完全不需要做额外处理。 - Python完全支持跨目录导入文件,不需要把所有代码都放在顶层目录,只要遵守包导入规则即可:
- 包含
__init__.py的目录会被识别为Python包 - 同包下的文件用
from . import xxx做相对导入 - 从项目根目录导入用绝对路径即可
- 包含
内容的提问来源于stack exchange,提问作者vK 3 1 RON
相关产品推荐
相关产品推荐

