Giter VIP home page Giter VIP logo

Comments (5)

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

Derive from A.__wrapped__.

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

If the decorator should somehow apply to the derived class, then use of a traditional meta class construct may be more appropriate.

from wrapt.

matt-chalmers avatar matt-chalmers commented on May 25, 2024

Hi Graham, thanks for the hints!

So using A.__wrapped__ would certainly work, but it starts to introduce "advanced" knowledge into how to apply our decorator, a more seamless option would be great.

And using metaclasses would obviously be abandoning our decorator pattern for this use case entirely. Not the end of the world, but certainly second prize.

Can I push you a little further and ask if you can imagine a way we could extend wrapt.decorator such that this would work seamlessly?

I ask because the decorator in concern is one written using your "universal" pattern and exists with the express goal of providing memoization in a wide variety of situations. We use simple behavioural flags passed to a single decorator which handles functions, classes, methods etc. The simplicity of application is key for us (lots of devs, large codebase).

Thanks,
Matt

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

What is the decorator doing in the case of being applied to a class?

And no, I don't know of any way of having class derivation somehow automagically follow __wrapped__. It is one of the parts of the Python object model that you can't override.

from wrapt.

GrahamDumpleton avatar GrahamDumpleton commented on May 25, 2024

Closing out this old issue. Accessing __wrapped__ when inheriting from a decorator class was no longer required since wrapt 1.12.0, provided you are using Python 3.7 or newer. There is no solution for older Python versions.

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.