2013-03-27 1 views
0

В строке после Elif Поручаю аргумент текст к самостоятельно. Тщетная попытка перезаписать/скопировать текущий экземпляр.Overwirting экземпляр (перезапись/копировать себя) в питоне

class Someclass(object): 
    def __init__(self, text): 
     if type(text) == type(""): 
      self._get_lines(text) 
      self._parse_stats() 
     elif type(text) == type(self): 
      self = text 
     else: 
      raise TypeError() 

само назначается, но только в рамках инициализации()

Можно ли скопировать экземпляр таким образом (или similair), или мне нужно пройти и скопируйте каждую переменную экземпляра в новый экземпляр. Как мне вернуть его?

ответ

2

переписывание self не влияет на сам экземпляр. вы можете вернуть другой объект из конструктора, переопределив __new__.

def SomeClass(object): 
    def __new__(cls, text): 
     if isinstance(text, SomeClass): 
      #return a copy of text. maybe.. 
      return copy.copy(text) 
     elif isinstance(text, basestring): 
      #return a new instance. __init__ will handle the rest 
      return super(SomeClass, cls).__new__(text) 
     else: 
      raise TypeError 

    def __init__(self, text): 
     ....