0

elifの後の行で、引数textselfに割り当てます。現在のインスタンスを上書き/コピーしようとする無駄な試み。

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 に答える