0

elif之后的行中,我将参数文本分配给 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()

self被赋值,但只在init ()范围内

是否可以以这种方式(或类似方式)复制一个实例,或者我是否需要通过并将每个实例变量复制到一个新实例。还是怎么退货?

4

1 回答 1

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):
        ....
于 2013-03-27T16:55:51.080 回答