On 09/06/2013 07:47 AM, Armin Rigo wrote:

Are you suggesting that inspect.getmro(A) would return (A, object,
type)?  That seems very wrong to me.

Currently, `inspect.getmro(A)` returns `(A, object)`.

Considering that Python actually will look in A's metaclass to find a class attribute, I think returning `(A, object, type(A)` is appropriate:

=================================================================================
Python 3.4.0a1+ (default:61ca4732399b+, Sep  4 2013, 22:28:04)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
--> class Meta(type):
...   meta_attr = 42
...

--> class Class(metaclass=Meta):
...   cls_attr = 'Vitamin-soaked towel'
...   def __init__(self):
...     self.inst_attr = 'dolphins'
...

--> test = Class()

--> test.inst_attr
'dolphins'

--> test.cls_attr
'Vitamin-soaked towel'

--> test.meta_attr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Class' object has no attribute 'meta_attr'

--> Class.cls_attr
'Vitamin-soaked towel'

--> Class.meta_attr
42

--> import inspect

--> inspect.getmro(Class)  #  with patch in place
(<class '__main__.Class'>, <class 'object'>, <class '__main__.Meta'>)
=================================================================================

If the goal is to fix `inspect.classify_class_attrs()`, then this
function only needs a specific fix, along the lines of looking in
`getmro(A) + getmro(type(A))`.  (A more minor issue is that the bug
report suggests `... + (type(A),)` only, but that's wrong: Python will
also look in all the base classes of type(A).)

Good point.  Will incorporate that into the final fix, whichever way it ends up.


"Fixing" inspect.getmro() as suggested would break a lot of other usages of it.

Any examples?

--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to