Python 在类本身内重命名类对象名称
所有这些都有效。但是我希望方法Python 在类本身内重命名类对象名称,python,python-3.x,Python,Python 3.x,所有这些都有效。但是我希望方法\u chusername也更改变量foo本身的名称。因此,fooas对象不再存在,但创建了一个具有相同属性的新对象bar: class User: def __init__(self, username): self.name = username def _chusername(self, new_name): old = self.name self.name=new_name foo = U
\u chusername
也更改变量foo
本身的名称。因此,foo
as对象不再存在,但创建了一个具有相同属性的新对象bar
:
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')
因此,我需要在类本身中指定给对象的变量的名称。这可能吗?有没有一种方法我有限的知识不包括?您不能更改变量本身的名称,但可以将对象分配给新变量 像这样: 但我不明白你到底想做什么。一定有比这更好的方法 尝试更改“变量名”
请务必解释您不能更改变量本身的名称,但可以将对象分配给新变量 像这样: 但我不明白你到底想做什么。一定有比这更好的方法 尝试更改“变量名”
请务必解释您不能更改变量本身的名称,但可以将对象分配给新变量 像这样: 但我不明白你到底想做什么。一定有比这更好的方法 尝试更改“变量名”
请务必解释您不能更改变量本身的名称,但可以将对象分配给新变量 像这样: 但我不明白你到底想做什么。一定有比这更好的方法 尝试更改“变量名”
一定要解释清楚不,这不是你想做的事。可以(通过大量工作)更改自定义对象的全局名称和属性,但这不是一个好主意 以以下为例:
>>> foo = User('foo')
>>> foo._chusername('bar')
>>> bar = foo
>>> del foo # Deletes the original 'foo' object
>>> bar.name
bar
这里我们有5个对用户('foo')
实例的引用(至少):全局名称foo
;siteconfiguration
对象上的administrator
属性;users
中索引0
处的参考;process_users
中for
循环中的本地名称user
;第五个引用是User.\u chusername()
方法中的self
本地名称,这是对同一对象的引用!user
本地名称仅短暂引用对象,但调用user.\u chusername()
时引用确实存在
现在告诉我调用user.\u chusername()
时应该更改哪些名称
我一开始说,全球名称可以更改;您必须访问globals()
字典,查找引用与self
相同对象的所有键,并对Python当前导入的所有模块执行此操作。然后,如果存在对同一对象的引用,则必须搜索所有自定义对象,无论在何处;否则,您将无法在上述示例中找到siteconfiguration.administrator
这是一项艰巨的任务。梳理一下可能会有所帮助,但现在你已经陷入了Python兔子洞,你应该重新思考一下当初为什么要这么做。不,这不是你想做的事情。可以(通过大量工作)更改自定义对象的全局名称和属性,但这不是一个好主意 以以下为例:
>>> foo = User('foo')
>>> foo._chusername('bar')
>>> bar = foo
>>> del foo # Deletes the original 'foo' object
>>> bar.name
bar
这里我们有5个对用户('foo')
实例的引用(至少):全局名称foo
;siteconfiguration
对象上的administrator
属性;users
中索引0
处的参考;process_users
中for
循环中的本地名称user
;第五个引用是User.\u chusername()
方法中的self
本地名称,这是对同一对象的引用!user
本地名称仅短暂引用对象,但调用user.\u chusername()
时引用确实存在
现在告诉我调用user.\u chusername()
时应该更改哪些名称
我一开始说,全球名称可以更改;您必须访问globals()
字典,查找引用与self
相同对象的所有键,并对Python当前导入的所有模块执行此操作。然后,如果存在对同一对象的引用,则必须搜索所有自定义对象,无论在何处;否则,您将无法在上述示例中找到siteconfiguration.administrator
这是一项艰巨的任务。梳理一下可能会有所帮助,但现在你已经陷入了Python兔子洞,你应该重新思考一下当初为什么要这么做。不,这不是你想做的事情。可以(通过大量工作)更改自定义对象的全局名称和属性,但这不是一个好主意 以以下为例:
>>> foo = User('foo')
>>> foo._chusername('bar')
>>> bar = foo
>>> del foo # Deletes the original 'foo' object
>>> bar.name
bar
这里我们有5个对用户('foo')
实例的引用(至少):全局名称foo
;siteconfiguration
对象上的administrator
属性;users
中索引0
处的参考;process_users
中for
循环中的本地名称user
;第五个引用是User.\u chusername()
方法中的self
本地名称,这是对同一对象的引用!user
本地名称仅短暂引用对象,但调用user.\u chusername()
时引用确实存在
现在告诉我调用user.\u chusername()
时应该更改哪些名称
我一开始说,全球名称可以更改;您必须访问globals()
字典,查找引用与self
相同对象的所有键,并对Python当前导入的所有模块执行此操作。然后必须搜索所有自定义对象,例如