在类its中重命名类对象名称

2024-10-02 02:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

class User:
    def __init__(self, username):
        self.name = username

    def _chusername(self, new_name):
        old = self.name
        self.name=new_name

foo = User('foo')
foo._chusername('bar')

所有这些都有效。但我希望方法_chusername也更改变量{}本身的名称。因此,fooas object不再存在,但是创建了一个新的对象bar,具有相同的属性:

^{pr2}$

因此,我需要在类本身中指定给对象的变量的名称。有可能吗?有没有一种方法是我有限的知识所不包括的?在


Tags: 对象方法nameself名称newfooinit
2条回答

不,这不是你想做的事。更改自定义对象的全局名称和属性是可能的(需要大量的工作),但这不是一个好主意。在

以下面的例子为例:

foo = User('foo')
siteconfiguration.administrator = foo
users = [foo]

def process_users(users):
    for user in users:
        user._chusername('bar')

process_users(users)

我们这里有5个参考5个,分别是对^{>}实例(至少>):全局名称{{};在^{{}}对象上的{{}}属性;在{{>}中^{{>}中,索引^{{>}中的{{};本地名称{};第五个参考是第五个参考是{}};第五个参考是{}的本地名称{{}本地名称的本地名称中的{}本地名称的本地名称的{{{User._chusername()方法,这是一个引用对同一个物体!user本地名称只简单地引用对象,但是当调用User._chusername()时,引用确实存在。在

现在告诉我调用user._chusername()时应该更改哪些名称?在

我在一开始就说过全局名称是可以更改的;您必须访问globals()字典并找到引用与self相同对象的所有键,并对Python当前导入的所有模块执行此操作。然后,如果有对同一对象的引用,则必须在所有地方搜索所有自定义对象;否则,您将无法在上面的示例中找到siteconfiguration.administrator。在

这是一项艰巨的任务。在这里,梳理一下{a1}可能会有所帮助,但是现在你已经深陷Python兔子洞了,你可能应该重新考虑一下当初为什么要这样做。在

不能更改变量本身的名称,但可以将对象分配给新变量 是这样的:

>>> foo = User('foo')
>>> foo._chusername('bar')

>>> bar = foo
>>> del foo # Deletes the original 'foo' object
>>> bar.name
bar

但我不明白你到底想做什么。一定有比这更好的方法 尝试更改“变量名”

一定要解释

相关问题 更多 >

    热门问题