在python中压缩一个实例(覆盖/复制自己)

时间:2013-03-27 16:40:26

标签: python instance self

elif 之后的行中,我将参数 text 分配给 self 。徒劳地尝试覆盖/复制当前实例。

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()

自我已分配,但仅限于 init ()

的范围内

是否可以以这种方式复制实例(或similair),或者我是否需要将每个实例变量复制到新实例。我该如何归还?

1 个答案:

答案 0 :(得分: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):
        ....