この質問の目的は、「組み込み」が Python の組み込み関数である方法を理解することです。
setattr メソッドをオーバーライドした場合、どうすれば元に戻すことができますか? たとえば、次のような「Working」クラスがあります。
class WorkingSetAttr:
def a(self): return 'a'
def b(self): return 'b'
そして、クラス「NonWorking」は次のようになります。
class NonWorkingSetAttr:
def a(self): return 'a'
def b(self): return 'b'
def __setattr__(self,a,b): pass
次に、オブジェクト w と n を作成し、次を実行します。
w = WorkingSetAttr()
setattr(w,'a',w.b)
print "w.a = %s, w.b = %s" % (w.a(), w.b())
n = NonWorkingSetAttr()
setattr(n, 'a', n.b)
print "n.a = %s, n.b = %s" % (n.a(), n.b())
出力は次のとおりです。
w.a = b, w.b = b
n.a = a, n.b = b
na は "b" を出力するはずですが、setattr は属性を変更しないため、"a" を出力することに注意してください。
問題は、オブジェクトwのように機能するように、オブジェクトnをどのように変更すればよいかということです。クラスではなく、オブジェクトを意味していることに注意してください。