我正在编写游戏的文本字段类.它应该从类外部将字符串更改为用户输入的字符串.以下是伪代码,但您应该了解我的问题:D
class txtfield(pygame.sprite.Sprite):
def __init__(self, var, name, x, y):
self.var=var
self.value=""
def update(self, key):
#I removed image-changing and the code which changes the string self.value
#key is a character from the last pressed button
#(self.value+=key)
if key=="return":
self.var=self.value
# I want this to be like 'a=self.value'.
#-> assuming self.name is 'Peter', 'a' should change to 'Peter'
#if the user hits enter
a="NAME"
txt=txtfield(a, "popo", 20, 20)
Run Code Online (Sandbox Code Playgroud)
我只是想txtfield改变变量a,但显然这不像我那样工作.
小智 5
你不能.Python只是按值传递,你要求传递引用.使用它构建的所有内容来解释完整的模型将是冗长的并且已经在官方文档中完成(阅读:如果您想要更多详细信息,请参阅),但是长话短说,您的代码中会发生以下情况:
a被指定一个指针/引用(与"传递引用"中的"引用"不同!)到一个字符串对象("NAME")self.你看,存储在字段中的引用与存储的引用self完全无关a.它们指的是同一个对象,但它们是完全独立的副本.用新引用覆盖一个(这就是你所能做的)不会改变其他副本.当然不是,怎么可能呢?
现在,对可变对象的引用将是另一回事.您仍然无法更改另一个范围中的引用,但您可以明显更改其他人在查看引用副本时看到的内容(例如更改字段).字符串是不可变的,所以这对你没有帮助.一般情况下模拟传递引用(您必须通过代理对象的字段路由所有内容)但仅共享状态是没有用的.所以最简单的解决方案是:问问自己为什么需要这个,并提出一个更清洁/更可行的解决方案.
| 归档时间: |
|
| 查看次数: |
2523 次 |
| 最近记录: |