파이썬 isinstance
함수는 내부적으로 어떻게 작동합니까? 결과를 변경하기 위해 할 수있는 일이 있나요? 예를 들어 클래스 내부에 특수 함수를 정의 할 수 있습니까? 혼합 여기에 적절하지 않을 것 제외데코레이터로 '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)
Decorator
역할을 믹스 인 같은 거의 : 여기 내 사용 사례입니다. 위의 코드가 작동하도록 할 수있는 방법이 있습니까? 위의 코드와
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)
: 다음에 대한
isinstance(f, Foo)
TypeError: isinstance() arg 2 must be a type or tuple of types
을 당신이 실제로이 달성하려고하는 무엇을 : 당신이
Foo()
를 사용하는 경우의 동작을 수정하고 있기 때문에, 그때는 아마 푸의__init__
, 다음과 같을 수있는을 수정하려면? –당신은 당신의 데코레이터가하는 것을 우리에게 말하지 않았기 때문에, 어떤 것이 효과가 있을지 알기가 어렵습니다. 데코레이터로 클래스 자체의 속성을 변경 한 다음 클래스를 반환하거나 데코레이터 대신 메타 클래스로 클래스를 다시 작성하십시오. – agf