Pau*_*nta 2 python decorator isinstance
Python isinstance函数如何在内部工作?我可以做些什么来改变它的结果,比如在类中定义一个特殊的函数还是什么?这是我的用例:
class Decorator:
def __init__(self, decorated):
self._decorated = decorated
def __call__(self):
return self._decorated()
@Decorator
class Foo:
pass
f = Foo()
# How can I make this be true?
isinstance(f, Foo)
Run Code Online (Sandbox Code Playgroud)
Decorator除了混合在这里不合适之外,它几乎就像混合物一样.有什么方法可以让上面的代码工作吗?我还应该注意该isinstance行也会出现以下错误:
isinstance(f,Foo)
TypeError:isinstance()arg 2必须是类型或类型的元组
以下内容如何:
def Decorator(decorated):
class Dec(decorated):
def __call__(self):
print 'in decorated __call__'
return decorated.__call__(self)
return Dec
@Decorator
class Foo(object):
def __call__(self):
print 'in original __call__'
f = Foo()
# How can I make this be true?
print isinstance(f, Foo)
Run Code Online (Sandbox Code Playgroud)
使用上面的代码:
isinstance(f, Foo) 作品;f() 调用deco方法然后转发到原始方法.基本思想是确保装饰Foo仍然是一个类,并确保装饰Foo是原始的子类Foo.
PS这一切的目的对我来说并不完全清楚; 可能是元类是实现你想要做的事情的更好方法.