【发布时间】:2009-06-18 22:51:21
【问题描述】:
为什么我不能执行如下操作:
class Test(object):
def __init__(self):
self = 5
t = Test()
print t
我希望它打印5,因为我们正在用它覆盖实例,但它根本不做任何事情。甚至不会抛出错误。只是忽略分配。
我知道几乎没有人愿意这样做,但你不能这样做似乎仍然很奇怪。
更新:我现在明白了为什么它不起作用,但我仍然想知道是否有任何方法可以从实例中替换实例.
【问题讨论】:
-
“从内部”,不是真的:我建议的 new 属于类,而不是实例。您通常可以更改大多数对象的 class 和/或状态(通过 dict)(“大多数”,因为有些是不可变的和/或不使用 dict),但不是对象的 IDENTITY - id(obj) 在您更改之前和之后将是相同的。 Telemachus' Ship 浮现在脑海中,但另一个主题似乎更适合另一个问题,因为它与这个主题的标题无关。
-
-1:替换实例打破了一个基本概念:对象具有唯一标识。返回一个新实例——即一个工厂——是有道理的。你想做什么?