[Python-Dev] Python 3, new-style classes and class (original) (raw)
Vinay Sajip vinay_sajip at yahoo.co.uk
Sat Nov 19 23:06:20 CET 2011
- Previous message: [Python-Dev] patch metadata - to use or not to use?
- Next message: [Python-Dev] Python 3, new-style classes and __class__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I was looking through the errors which occur when running the test suite of Django's py3k branch under Python 3, and one particular set of errors caught my eye which is unrelated to the bytes/str dance. These errors occur in some Django utility code, which supplies a SimpleLazyObject (new-style) class [1]. This implements a proxy, which is initialised using a callable. The callable returns the object to be wrapped, and it's called when needed to set up the wrapped instance.
The SimpleLazyObject needs to pretend to be the class of the wrapped object, e.g. for equality tests. This pretending is done by declaring class as a property in SimpleLazyObject which fetches and returns the class attribute of the wrapped object. This approach doesn't work in Python 3, however: the property named class doesn't show up in the class dict of SimpleLazyObject, and moreover, there are restrictions on what you can set class to - e.g. Python complains if you try and set a class attribute on the instance to anything other than a new-style class.
What's the simplest way in Python 3 of implementing the equivalent approach to pretending to be a different class? Any pointers appreciated.
Thanks and regards,
Vinay Sajip
- Previous message: [Python-Dev] patch metadata - to use or not to use?
- Next message: [Python-Dev] Python 3, new-style classes and __class__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]