@Waldeinsamkeit 2024-10-22 23:27 采纳率: 50%
浏览 32
已结题

有关类的报错,在模块里调用另一个模块的方法下的变量时出错

架构:主程序alien_invasion.py
bullet.py settings.py
问题:在settings里的Settings类有_bullet方法,里面定义了若干变量,在bullet里有Bullet类。
主程序中有self.settings=Settings()指向一个实例,且有new_bullet=Bullet(self)self指向主程序的类AlienInvasion,在Bullet类中提供了接口ai_game对接self。现在要通过bullet模块的self.settings=ai_game.settings,self.settings._bullet()来调用_bullet的若干变量。报错了

img

  • 写回答

21条回答 默认 最新

  • bug菌¹ 优质创作者: Java、算法与数据结构技术领域 2024-10-23 10:05
    关注

    该回答引用ChatGPT-4o并结合自身经验回答,望对题主有所帮助/启发;若有帮助,还望采纳🤝🤝🤝


    根据你的描述,问题在于如何在 Bullet 类中调用 Settings 类的 _bullet 方法。下面是一些可能的原因和解决方法:

    1. _bullet 方法的可访问性问题

    以下是一些检查点:

    • 方法 _bullet 是否以单下划线开头(如 _bullet),这意味着它被视为“受保护的”,应在类内部或子类中调用。尝试去掉下划线,使其成为公有方法(bullet),如果没有特别的封装需求。
    • 如果希望保持受保护的命名方式(即使用 _bullet),确保在 Bullet 类中正确访问。

    2. 可能的代码结构示例

    检查代码结构是否符合预期,可能类似以下:

    settings.py

    class Settings:
        def __init__(self):
            # 初始化其他设置
            pass
    
        def _bullet(self):
            # 定义 _bullet 方法中的若干变量
            self.bullet_speed = 1.5
            self.bullet_width = 3
            self.bullet_height = 15
            self.bullet_color = (60, 60, 60)
    

    bullet.py

    class Bullet:
        def __init__(self, ai_game):
            self.settings = ai_game.settings  # 连接 Settings 实例
            self.settings._bullet()  # 调用 _bullet 方法
    
            # 使用 Settings 中定义的变量
            self.speed = self.settings.bullet_speed
            self.width = self.settings.bullet_width
            self.height = self.settings.bullet_height
            self.color = self.settings.bullet_color
    

    alien_invasion.py

    from settings import Settings
    from bullet import Bullet
    
    class AlienInvasion:
        def __init__(self):
            self.settings = Settings()  # 创建 Settings 实例
    
        def create_bullet(self):
            new_bullet = Bullet(self)  # 创建 Bullet 实例
    

    3. 调用方式的正确性

    确保调用 _bullet() 方法时,ai_game.settings 已正确初始化。可以在调试时打印 ai_game.settings 来确认其状态。

    4. 若问题仍未解决

    • 请提供具体的错误信息,如 AttributeError 或 TypeError 及其详细信息。
    • 可以上传代码片段的截图或文件,以便进一步分析。

    这样有助于找出具体的错误原因并提供更准确的解决方案。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(20条)

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月22日