STINNER Victor <vstin...@redhat.com> added the comment:

> In some cases we have the type itself, not an instance. So it makes sense to 
> make %T an equivalent of arg->tp_name instead of Py_TYPE(arg)->tp_name.

"arg->tp_name" is rare in the code base, whereas "Py_TYPE(arg)->tp_name" is a 
very common pattern.

I'm not sure that a formatter is needed for "arg->tp_name", you can already use 
"%s" with "arg->tp_name", no?

My intent was to make the C code less verbose, respect the PEP 399, but also 
indirectly avoid the implicit borrowed reference of Py_TYPE() :-)
https://pythoncapi.readthedocs.io/bad_api.html#borrowed-references


> On Python side, you need to output either short name obj.__class__.__name__ 
> or full qualified name obj.__class__.__module__ + '.' + 
> obj.__class__.__qualname__ with exception that the module name should be 
> omitted if it is 'builtins'.

Sometimes, the qualified name would be more appropriate, but it's sometimes 
tricky to decide if the short name, qualified name or fully qualified name is 
the "right" name... So I chose to restrict this issue to the most common case, 
Py_TYPE(arg)->tp_name :-)

Ah, and changing strings is a risk of breaking the backward compatibility. For 
example, cause issue with pickle. So it should be discussed on a case by case 
basis.

Moreover, if you want to change a string, the Python code should be updated as 
well. I suggest to open a new issue to discuss that.

Don't get me wrong, I'm interested to do these changes, but it's a wider 
project :-)


> obj.__class__.__qualname__ if obj.__class__.__module__ == 'builtins' else 
> f'{obj.__class__.__module__}.{obj.__class__.__qualname__}'
>
> The case of the module name '__main__' can be handled specially too.
> Obviously it is desirable to have a more handy way of writing such expression.

To be honest, I also considered to proposed a second formatter to do something 
like that :-) But as you explained, I'm not sure which name is the good name: 
qualified or fully qualified (with module name)?

First of all, would it help to have a *function* to get these names? Maybe we 
could first use such functions before discussing adding a new formatter in 
PyUnicode_FromFormat()?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue34595>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to