我是python的新手,并且为uni做一些练习,
我熟悉Java,所以我尝试在python中创建一个类,然后从同一目录中的另一个文件中创建该类的实例以用作对象。
所以这是我要尝试的方法:
在main.py中-
import player
p1 = player.Player(300, 300, 64, 64)
这是我在Player.py中的Player类。
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:模块“ player”没有属性“ Player”
经过一些研究,我也尝试过:
from player import Player
p1 = Player(300, 300, 64, 64)
其结果是:ImportError:无法从“玩家”(C:\ Users \ Alex \ PycharmProjects \ BunkerGame \ player.py)导入名称“玩家”
只需简单地忽略其他代码,这应该在player.py中创建Player类的实例以在main.py文件中使用
答案 0 :(得分:2)
如注释中所述,您将main导入播放器-这意味着您进行了循环导入:Python无法解决此问题,因此引发了属性错误。
您不需要这样做。主游戏中不应有玩家需要的任何内容。如果有,请将其移至播放器本身或第三个模块。
答案 1 :(得分:1)
从您提到的错误中,您很可能已经安装了一个名为player
的模块,该模块是Python导入的,而不是本地文件player.py
。尝试将文件player.py
重命名为其他名称,或者在控制台上执行pip uninstall player
。
请注意错误如何显示cannot import name 'Player' from 'player'
,这意味着Python正在访问名为player
的模块,但无法访问类Player
。
答案 2 :(得分:1)
正如@Daniel Roseman指出的那样,我在player.py中拥有了“ import main”,而python显然不喜欢它,删除了此代码,并通过任何相关代码解决了该问题!
答案 3 :(得分:0)
您只应该这样写导入:
import Player
p1 = Player(300, 300, 64, 64)
您还可以编写以下内容:
import Player as p
p1 = p(300, 300, 64, 64)
答案 4 :(得分:-1)
您需要删除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'