Why Does Overriding __getattribute__ To Proxy A Value Screw Up Isinstance?
Why does this happen? class IsInstanceScrewer(object):     def __init__(self, value):         self.value = value      def __getattribute__(self, name):         if name in ('value',
Solution 1:
__getattribute__ is returning the __class__ of the wrapped value instead of its own __class__:
>>> class IsInstanceScrewer(object):
    def __init__(self, value):
        self.value = value
    def __getattribute__(self, name):
        print name
        if name in ('value',):
            return object.__getattribute__(self, name)
        value = object.__getattribute__(self, 'value')
        return object.__getattribute__(value, name)
>>> isinstance(IsInstanceScrewer(False), bool)
__class__
True
>>> isinstance(IsInstanceScrewer([1, 2, 3]), list)
__class__
True
This may be desired behavior or not depending on what you're doing.
Post a Comment for "Why Does Overriding __getattribute__ To Proxy A Value Screw Up Isinstance?"