Прежний код работает, за исключением того, что он ничего не будет делать, поскольку он просто заменяет объект с именем «self» в области действия changeme (). Имена Python не привязаны к значениям, они всегда связаны с их областью действия или пространством имен.
Чтобы сделать то, что вы хотите, вам нужно иметь доступ к имени вне класса, которое вы можете назначить из него:
class Test:
def changeme(self):
global myclass
myclass = Test(3)
myclass = Test(2)
myclass.changeme()
print myclass # 3
Это просто перезаписывает имя 'myclass', указывая на новый экземпляр. Он не «перезаписывает» первый экземпляр, как вы думаете. Старый экземпляр все еще живет и будет собирать мусор, если на него нет ссылок в другом месте.