Giter VIP home page Giter VIP logo

Comments (9)

christophercrouzet avatar christophercrouzet commented on May 25, 2024

Would it be safe for me to add in my code the following snippet in the _ObjectProxyMethods as a temporary fix?

@property
def __weakref__( self ):
    return self.__wrapped__.__weakref__

@__weakref__.setter
def __weakref__( self, value ):
    self.__wrapped__.__weakref__ = value

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

I don't have time right this second to look at what you are suggesting properly, but can you use:

inspect.getmembers(Class.__wrapped__)

When decorating a class, because it replaces the class type with a wrapper, it is necessary in certain cases to use the __wrapped__ attribute to get back the original class type.

from wrapt.

christophercrouzet avatar christophercrouzet commented on May 25, 2024

Thanks! I actually figured that out just after posting but for now I'll keep the previous workaround to see if it ends up breaking somewhere. So far so good!

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

I can't reproduce this in Python 2.7.2. The code of inspect.getmembers() is the same for 2.7.2 and 2.7.5.

What version of wrapt is this with? I tried the last official release and my working copy.

from wrapt.

christophercrouzet avatar christophercrouzet commented on May 25, 2024

Ah, weird. I've just recloned the latest version of wrapt from the branch master to give it another go and I've still got the issue. It also happens in Python 2.6.8.

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

It only happens when not using the C extension speedups. When you installed wrapt, you must have only managed to install the pure Python wrappers somehow.

Anyway, know how to duplicate now.

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

I would probably say it is safer to have just:

    @property
    def __weakref__(self):
        return self.__wrapped__.__weakref__

I don't think that a weakref attribute should be assignable from outside of the class.

from wrapt.

christophercrouzet avatar christophercrouzet commented on May 25, 2024

Thanks!

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

Fixed in version 1.9.0.

$ cat t.py
import inspect
import wrapt

@wrapt.decorator
def pass_through(wrapped, instance, args, kwargs):
    return wrapped(*args, **kwargs)

@pass_through
class Class(object):
    pass

for name, item in inspect.getmembers( Class ):
    print( item )

$ python t.py
<type 'type'>
<method-wrapper '__delattr__' of FunctionWrapper object at 0x10c9b4738>
{'__dict__': <attribute '__dict__' of 'Class' objects>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Class' objects>, '__doc__': None}
None
<built-in method __format__ of FunctionWrapper object at 0x10c9b4738>
<method-wrapper '__getattribute__' of FunctionWrapper object at 0x10c9b4738>
<method-wrapper '__hash__' of FunctionWrapper object at 0x10c9b4738>
<method-wrapper '__init__' of FunctionWrapper object at 0x10c9b4738>
__main__
<built-in method __new__ of type object at 0x10cb08b70>
<built-in method __reduce__ of FunctionWrapper object at 0x10c9b4738>
<built-in method __reduce_ex__ of FunctionWrapper object at 0x10c9b4738>
<method-wrapper '__repr__' of FunctionWrapper object at 0x10c9b4738>
<method-wrapper '__setattr__' of FunctionWrapper object at 0x10c9b4738>
<built-in method __sizeof__ of FunctionWrapper object at 0x10c9b4738>
<method-wrapper '__str__' of FunctionWrapper object at 0x10c9b4738>
<built-in method __subclasshook__ of type object at 0x10cb08f78>
<attribute '__weakref__' of 'Class' objects>

from wrapt.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.