[Python-Dev] inspect and metaclasses (original) (raw)
Ethan Furman ethan at stoneleaf.us
Fri Sep 6 17:14:09 CEST 2013
- Previous message: [Python-Dev] inspect and metaclasses
- Next message: [Python-Dev] inspect and metaclasses
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 "", line 1, in 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.classifyclassattrs()
, then this function only needs a specific fix, along the lines of looking ingetmro(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
- Previous message: [Python-Dev] inspect and metaclasses
- Next message: [Python-Dev] inspect and metaclasses
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]