Python 未从单独文件导入的类实例的属性
所以我正在用基本Python开发一个基于文本的游戏,我遇到了一个问题。当我在另一个文件中使用主文件中的player类实例时,它不会保存属性,例如名称。 这是相关代码Python 未从单独文件导入的类实例的属性,python,Python,所以我正在用基本Python开发一个基于文本的游戏,我遇到了一个问题。当我在另一个文件中使用主文件中的player类实例时,它不会保存属性,例如名称。 这是相关代码 main.py: from ply import Player player = Player() ... def pickName(): global player print("And, what's your name?") player.name = input(">") prin
main.py
:
from ply import Player
player = Player()
...
def pickName():
global player
print("And, what's your name?")
player.name = input(">")
print("Hello, %s!" % player.name) #this works
class Player:
def __init__(self):
self.name = ""
....
ply.py
:
from ply import Player
player = Player()
...
def pickName():
global player
print("And, what's your name?")
player.name = input(">")
print("Hello, %s!" % player.name) #this works
class Player:
def __init__(self):
self.name = ""
....
person.py:
import main
print(main.player.name) #prints an empty string
如果有任何澄清问题,请随时提问;这是我的第一个问题。
谢谢
为了解决一些问题,pickName在main.py内调用,因此它在main.py内运行并更改名称,但不在main.py外 我解决了我的问题。基本上,我将该类的实例移动到定义该类的文件中,并导入了该实例。现在,出于某种原因,它起作用了。如果有人知道原因,请发表评论,但现在它起作用了,所以我不会抱怨。你没有在
person.py
中调用main.pickPlayer()
,因此没有设置名称也就不足为奇了。嗯,你从来没有调用过pickName
。另一方面,您应该真正避免全局可变状态,这是类的主要原因之一。pickName
应该调用Player
本身(将所选名称作为参数传递给适当的播放器。uuu init_uuu
),然后返回新实例。我认为您应该使用名称创建Player类,因此def\uuu init\uuu(self,name)
和self.name=name
将是一个更干净的解决方案。