【问题标题】:Importing Subclasses from Modules in python从python中的模块导入子类
【发布时间】:2013-05-15 15:38:19
【问题描述】:

我在导入一系列模块并访问其中的类时遇到问题。

这是我的代码:

import sys, os
for path, name, files in os.walk(os.getcwd()[:os.getcwd().rindex("Mario")+5]):
    sys.path.insert(0, os.path.join(path))
from pygame.locals import *
import pygame, Screen

WIDTH, HEIGHT = SIZE = 1200, 675
running = True
screen = pygame.display.set_mode(SIZE, SRCALPHA)
current = None
screen_menu = Screen.Menu().add_widget(Widget.Button(WIDTH/2-25, HEIGHT/2-25, 50, 30))

跑步时我得到:

    Traceback (most recent call last):
  File "I:\Computing\Python\Mario\Global.py", line 5, in <module>
    import pygame, Screen
  File "I:\Computing\Python\Mario\screen\Screen.py", line 5, in <module>
    import pygame, Global
  File "I:\Computing\Python\Mario\Global.py", line 11, in <module>
    screen_menu = Screen.Menu().add_widget(Widget.Button(WIDTH/2-25, HEIGHT/2-25, 50, 30))
AttributeError: 'module' object has no attribute 'Menu'
[Finished in 2.9s with exit code 1]

有没有人知道为什么会发生这种情况,我已经导入了它,Menu 只是 Screen 中的一个类,如果需要我可以给你 Screen 类!

【问题讨论】:

  • @Blender 很遗憾我试过了,它说,ImportError: No module named Menu
  • 在运行时修改sys.path 通常是一个错误。它使您的代码依赖于环境。对导入路径的任何更改都应在环境中进行,并且有许多系统可以做到这一点。

标签: python class import module


【解决方案1】:

你有一个循环依赖——Screen 使用GlobalGlobal 使用Screen。修改你的代码,不要有任何循环导入。

【讨论】:

  • 这会解决问题吗,或者只是好的编程,我也使用“循环”导入来布局我的代码,以一种我最初开始学习 Java 时易于阅读的方式:)
  • 循环导入总是反映次优设计,并可能导致像您在此处看到的错误。如果你看不出这个问题是由你的循环导入引起的(它是),那就更强烈地支持避免它们的必要性。
  • 成功了,谢谢你,我以后会记住的! :D
猜你喜欢
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多