mirror of https://github.com/django/django.git
29 lines
1.3 KiB
Plaintext
29 lines
1.3 KiB
Plaintext
|
|
||
|
Backwards-incompatible changes
|
||
|
==============================
|
||
|
|
||
|
LazyObject
|
||
|
----------
|
||
|
|
||
|
``LazyObject`` is an undocumented utility class used for lazily wrapping other
|
||
|
objects of unknown type. In Django 1.1 and earlier, it handled introspection in
|
||
|
a non-standard way, depending on wrapped objects implementing a public method
|
||
|
``get_all_members()``. Since this could easily lead to name clashes, it has been
|
||
|
changed to use the standard method, involving ``__members__`` and ``__dir__()``.
|
||
|
If you used ``LazyObject`` in your own code, and implemented the
|
||
|
``get_all_members()`` method for wrapped objects, you need to make the following
|
||
|
changes:
|
||
|
|
||
|
* If your class does not have special requirements for introspection (i.e. you
|
||
|
have not implemented ``__getattr__()`` or other methods that allow for
|
||
|
attributes not discoverable by normal mechanisms), you can simply remove the
|
||
|
``get_all_members()`` method. The default implementation on ``LazyObject``
|
||
|
will do the right thing.
|
||
|
|
||
|
* If you have more complex requirements for introspection, first rename the
|
||
|
``get_all_members()`` method to ``__dir__()``. This is the standard method,
|
||
|
from Python 2.6 onwards, for supporting introspection. If you are require
|
||
|
support for Python < 2.6, add the following code to the class::
|
||
|
|
||
|
__members__ = property(lambda self: self.__dir__())
|