C-API, tp_dictoffset vs tp_members
doomster at knuut.de
Sun Jul 26 21:39:17 CEST 2009
"Martin v. Löwis" wrote:
>>>> I have a predefined set of members, some of which are optional.
>>> Having optional fields is also a good reason.
>> What is the use of T_OBJECT_EX vs T_OBJECT in PyMemberDef then?
> Right - this works for optional objects. However, it can't possibly
> work for any of the other fields.
I have two members, one T_OBJECT and one T_OBJECT_EX. Both are NULL and both
still appear in the dir() output. For one, accessing it returns 'None', for
the other it raises an exception. I would have expected an element that is
not accessible, not even 'None', to also not be visible in dir().
>> I would have thought that the former describes an optional field,
>> because the behaviour of accessing it when it is NULL is the same
>> as accessing a nonexistent field. However, I see that it still
>> appears in the dir() output even if it is NULL, so it seems I'm
>> misunderstanding this.
> I suppose that's because there will still be a descriptor for the
> field in the class.
So is that intentional or is it dir() that could be improved there? Should I
file a bugreport?
Thanks for the tip with __dict__ in tp_members, that does the job!
More information about the Python-list