Rob Kirkpatrick wrote:
I'm assuming this has been discussed before, but I'm lacking any
Google keywords that bring up the appropriate discussion.

You are looking for "mro" aka method resolution order. The inspect module contains several helper functions to inspect a class hierarchy.

The following interactive session should give you an impression how to use the functions:

>>> import inspect
>>> import pprint
>>> from sqlalchemy.types import DateTime

>>> inspect.getmro(DateTime)
(<class 'sqlalchemy.types.DateTime'>, <class 'sqlalchemy.types.TypeEngine'>, <class 'sqlalchemy.types.AbstractType'>, <type 'object'>
>>> DateTime.__bases__
(<class 'sqlalchemy.types.TypeEngine'>,)

>>> pprint.pprint(inspect.getclasstree(inspect.getmro(DateTime)))
[(<type 'object'>, ()),
 [(<class 'sqlalchemy.types.AbstractType'>, (<type 'object'>,)),
  [(<class 'sqlalchemy.types.TypeEngine'>,
    (<class 'sqlalchemy.types.AbstractType'>,)),
   [(<class 'sqlalchemy.types.DateTime'>,
     (<class 'sqlalchemy.types.TypeEngine'>,))]]]]

>>> [cls for cls in inspect.getmro(DateTime) if hasattr(cls, '__init__')]
[<class 'sqlalchemy.types.DateTime'>, <class 'sqlalchemy.types.TypeEngine'>, <class 'sqlalchemy.types.AbstractType'>, <type 'object'>]

>>> [cls for cls in inspect.getmro(DateTime) if hasattr(cls, 'adapt')]
[<class 'sqlalchemy.types.DateTime'>, <class 'sqlalchemy.types.TypeEngine'>]

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to