Josh Rosenberg <shadowranger+pyt...@gmail.com> added the comment:

I'm also a little skeptical of the OP's proposed use case for other reasons. In 
any circumstance other than "all classes are defined in the same module", you 
can't really make useful guarantees about subclass definition order, because:

1. If the converters are defined in multiple modules in a single package, the 
module with IntConverter could be imported first explicitly, and now 
BoolConverter will come second.

2. If all the provided converters occur in a single monolithic module, and some 
other package tries to make a converter for their own int subclass, well, 
IntConverter is already first in the list of subclasses, so the other package's 
converter will never be called (unless it's for the direct subclass of int, 
rather than a grandchild of int, but that's an implementation detail of the 
OP's project).

Essentially, to write such a class hierarchy properly, you'd need to rejigger 
the ordering each time a class was registered such that any converter for a 
parent class was pushed until after the converter for all of its descendant 
classes (and if there is multiple inheritance involved, you're doomed).

Even ignoring all that, their use case doesn't require explicit registration if 
they don't want it to. By making a simple metaclass for the root class, the 
metaclass's __new__ can perform registration on the descendant class's behalf, 
either with the definition time ordering of the current design, or with a more 
complicated rejiggering I described that would be necessary to ensure parent 
classes are considered after child classes (assuming no multiple inheritance).

----------

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

Reply via email to