Найти - Пользователи
Полная версия: замена self другим объектом
Начало » Python для экспертов » замена self другим объектом
1
qwer
может ли объект в своем методе заменить свой self другим объектом (например создать новый объект-потомок своего класса, скопировать свое содержимое с некоторыми изменениями) ?
pasaranax
Родить наследника можно.
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
Можно, только изврат это какой-то.
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__
Андрей Светлов
Slava
Вы __slots__ забыли обработать правильно. А еще есть weakref list и много всего интересного. Т.е. в общем виде - не работатет.
qwer
Оно не нужно (и не только в случае именно этого языка программирования). В отличие, скажем, от С++ Питон работает только со ссылками и не имеет аналога “автоматической переменной на стеке”. Поэтому не требуется конструктор копирования и оператор присваивания.
И не зачем их пытаться изобрести. Уверен, при более внимательном рассмотрении вопроса обязательно найдется лучшая альтернатива.
Slava
Про __slots__ не забывал, только если все учитывать (__metaclass__, __mro__ и т.д.) слишком большой код получится. Да и заменять так объект, не лучшее решение, только так для головоломки, не для рабочих проектов.
Андрей Светлов
Угу
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB