我想创建一个包装类,它的行为方式与被包装的对象完全相同(除了一些特定的例外)。我现在遇到的问题是内置函数。如何将内置函数重定向到包装对象?在
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'
您可以动态创建一个新类,它既是
Wrapper
和Foo
的子类,因此您将拥有所需的所有属性:现在您可以:
^{pr2}$附言:
__init__
和__getattr__
函数中使用object.__getattr__
(或__setattr__
)来获取和设置此属性。在相关问题 更多 >
编程相关推荐