qwer
			  Ноя. 22, 2009 19:21:47
		 	 
			
				может ли объект в своем методе заменить свой self другим объектом (например создать новый объект-потомок своего класса, скопировать свое содержимое с некоторыми изменениями) ?
			
		 
		
			
			  pasaranax
			  Ноя. 22, 2009 19:33:35
		 	 
			
				Родить наследника можно.
class Cl(object):
    def m(self):
        print "Cl's method"
    def birth(self):
        class Heier(type(self)): pass
        return Heier
c = Cl()
c.m()
subC = c.birth()()
subC.m()
 
			 
		 
		
			
			  Slava
			  Ноя. 22, 2009 19:44:14
		 	 
			
				Можно, только изврат это какой-то.
class B(object):
    def __init__(self, a):
        self.c = a;
    def f2(self):
        return self.c
class A(object):
    def __init__(self, a):
        self.a = 34
    def strange_func(self, c):
        self.__class__ = B
        self.__dict__.clear()
        obj = B(c)
        self.__dict__.update(obj.__dict__)
    def f1(self):
        return self.a
j = A(122)
print j.a
j.strange_func(33)
print j.f2()
print j.__class__
 
			 
		 
		
			
			  Андрей Светлов
			  Ноя. 22, 2009 23:51:57
		 	 
			
				Slava
Вы __slots__ забыли обработать правильно. А еще есть weakref list и много всего интересного. Т.е. в общем виде - не работатет.
qwer
Оно не нужно (и не только в случае именно этого языка программирования). В отличие, скажем, от С++ Питон работает только со ссылками и не имеет аналога “автоматической переменной на стеке”. Поэтому не требуется конструктор копирования и оператор присваивания. 
И не зачем их пытаться изобрести. Уверен, при более внимательном рассмотрении вопроса обязательно найдется лучшая альтернатива.
			
		 
		
			
			  Slava
			  Ноя. 23, 2009 15:32:05
		 	 
			
				Про __slots__ не забывал, только если все учитывать (__metaclass__, __mro__ и т.д.)  слишком большой код получится. Да и заменять так объект, не лучшее решение, только так для головоломки, не для рабочих проектов.
			
		 
		
			
			  Андрей Светлов
			  Ноя. 23, 2009 20:23:08
		 	 
			
				Угу