我想創建一個包裝類,其行爲與包裝對象的行爲完全相同(只有一些特定的例外情況)。我現在遇到的問題是內置函數。我如何將內置函數重定向到包裝對象?將內置函數重定向到包裝類
class Wrapper:
def __init__(self, wrapped):
object.__setattr__(self, '_wrapped', wrapped)
def __getattr__(self, name):
return getattr(object.__getattribute__(self, '_wrapped'), name)
class Foo:
def __init__(self, val):
self.val = val
def __abs__(self):
return abs(self.val)
foo = Wrapper(Foo(-1))
print(foo.val) # Okay
print(abs(foo)) # TypeError: bad operand type for abs(): 'Wrapper'
'包裝器'應該定義'__abs__'。最簡單的可能是從'Foo'繼承。這可以通過元類動態完成。 –
如果你想跟蹤對象的變化,你只需要打包mutables。數字不可變,所以你不需要包裝這些數字。 –
@MartijnPieters我知道,這只是一個玩具的例子。 –