gpt4 book ai didi

python - 更改类内的变量

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:24 24 4
gpt4 key购买 nike

我正在为游戏编写文本字段类。它应该将类外的字符串更改为用户输入的字符串。以下是伪代码,但你应该明白我的问题: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)

我只是想让 txtfield 改变变量 a,但显然我的做法不对。

最佳答案

你不能。 Python 完全是按值传递,你要求按引用传递。解释完整模型及其构建的所有内容等会很冗长,并且已经在官方文档中完成(阅读:如果您需要更多详细信息,请参阅该文档),但长话短说,您的代码中发生的事情是这样的:

  • a 被分配了一个指向字符串对象(“NAME”)的指针/引用(与“传递引用”中的“引用”不同!) )
  • 当类的构造函数被调用时,该指针/引用被复制(按值传递)。
  • 此引用再次复制到 self 的字段中。

你看,self 字段中存储的引用与a 中存储的引用完全无关。它们指的是同一个对象,但它们是完全独立的副本。 用新的引用覆盖一个副本(这就是你所能做的)不会改变其他副本。当然不是,怎么可能?

现在,对可变对象的引用将是另一回事。您仍然无法更改另一个范围内的引用,但您显然可以更改其他人在遵循其引用副本时看到的内容(例如更改字段)。字符串是不可变的,所以这对你没有帮助。模拟引用传递通常没有用(您必须通过代理对象的字段路由所有内容),而只是为了共享状态。所以最简单的解决方案是:问问自己为什么需要这个,然后想出一个更清洁/更可行的解决方案。

关于python - 更改类内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com