2013-03-27 3 views
0

의 인스턴스를 (/ 셀프 복사 덮어 쓰기) Overwirting I 인수 텍스트자기을 할당합니다. 현재 인스턴스를 덮어 쓰거나 복사하려는 헛된 시도.는 <strong>ELIF</strong> 후 라인에서 파이썬

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): 
     ....