Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未从单独文件导入的类实例的属性_Python - Fatal编程技术网

Python 未从单独文件导入的类实例的属性

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

所以我正在用基本Python开发一个基于文本的游戏,我遇到了一个问题。当我在另一个文件中使用主文件中的player类实例时,它不会保存属性,例如名称。 这是相关代码

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
将是一个更干净的解决方案。