例えば
def __setattr__(self, name, value):
...
ただし、正常に動作します:
def __init__(self):
self.__setattr__ = foo
foo が呼び出されないという点で何も達成していないようです。
前もって感謝します。
例えば
def __setattr__(self, name, value):
...
ただし、正常に動作します:
def __init__(self):
self.__setattr__ = foo
foo が呼び出されないという点で何も達成していないようです。
前もって感謝します。
__setattr__
インスタンスメソッドではなく、クラスメソッドを使用します。次のコードの出力を調べます。
コード:
def func(*args):
print "--Func--"
print args
class A():
def __setattr__(*args):
print "--SetAttr--"
print args
a = A()
print "a.x = 10"
a.x = 10
print
A.__setattr__ = func
print "a.y = 20"
a.y = 20
print
出力:
a.x = 10
--SetAttr--
(<__main__.A instance at 0x2cb120>, 'x', 10)
a.y = 20
--Func--
(<__main__.A instance at 0x2cb120>, 'y', 20)
クラスメソッドがインスタンスメソッドを呼び出すようにコードを書くことができます:
class C():
def __init__(self, setattr):
#Must access in this way since we overwrote __setattr__ already
self.__dict__['setattr_func'] = setattr
def __setattr__(self, name, value):
self.setattr_func(name, value)