我是python的新手,正在为uni做一些练习,
我熟悉Java,所以我试图在python中创建一个类,然后从同一目录中的另一个文件中创建该类的实例以用作对象。
所以这就是我要尝试的方法:
在main.py中-
import player
p1 = player.Player(300, 300, 64, 64)
这是我的Player类,位于player.py中
import main
class Player:
def __init__(self, x, y, width, height):
self.x = x
self.y = y
self.width = width
self.height = height
self.vel = 15
self.left = False
self.right = False
self.walkCount = 0
这导致:
[AttributeError:模块'玩家'没有属性'玩家'
经过一些研究,我也尝试过:
from player import Player
p1 = Player(300, 300, 64, 64)
这导致:ImportError:无法从'player'(C:\ Users \ Alex \ PycharmProjects \ BunkerGame \ player.py)导入名称'Player']
非常简单,忽略了一些其他代码,这应该在player.py中创建Player类的实例以在main.py文件中使用
正如您在注释中指出的,您将main导入播放器-这意味着您进行了循环导入:Python无法解决此问题,因此会引发属性错误。
您不需要这样做。主游戏中不应有玩家需要的任何内容。如果有,请将其移至播放器本身或第三个模块。
从您提到的错误中,您很可能已经安装了一个名为player
的模块,该模块是Python导入的,而不是本地文件player.py
。尝试将文件player.py
重命名为其他名称,或者在控制台上执行pip uninstall player
。
[注意错误是如何显示cannot import name 'Player' from 'player'
的,这意味着Python正在访问名为player
的模块,但无法访问类Player
。
正如@Daniel Roseman指出的那样,我在player.py中拥有了'import main',这是python显然不喜欢的,删除了它,并且所有相关代码都解决了这个问题!
您只应该这样写导入:
import Player
p1 = Player(300, 300, 64, 64)
您也可以写类似:
import Player as p
p1 = p(300, 300, 64, 64)
您需要删除player.
您正在通过使用.
作为属性传递类,这是第一个错误的原因,第二个原因是您的播放器页面上的导入主界面和主页面上的播放器导入页。只需在播放器页面上删除import main
。
第一个错误:
import player
p1 = player.Player(300, 300, 64, 64)
这应该是:
import player
p1 = Player(300, 300, 64, 64)
以下是发生的情况的示例:
class Player:
def __init__(self, name, age):
self.name = name
self.age = age
player = Player # setting the class to variable
player.name = 'Johnny' # .name is the attribute of the Player class
print(player.name)
输出:
'Johnny'
您已完成此操作:
player.Player.name = 'Johnny'
print(player.name)
哪个会返回您的错误:
Traceback (most recent call last): File "main.py",
line 8, in <module>
player.Player.name = 'Johnny'AttributeError: type object 'Player' has no attribute 'Player'