Hi, I have a class `MyObject` and a class `MyObject_specific_case` that inherits `MyObject`:
``` class MyObject: def __init__(self, arg): # Do stuff class MyObject_specific_case: def __init__(self, arg): # Do stuff super().__init__(arg) ``` It is easy to decide if the object is a 'specific case' by looking at `arg`. Therefore, I would like some sort of mechanism that autonomously decides to instantiate `MyObject` or `MyObject_specific_case` depending on the value of `arg`. The ideal interface would be: ``` sage: my_object = MyObject(gen) sage: # Assume arg corresponds to the specific case: sage: isinstance(my_object, MyObject_specific_case) True sage: isinstance(my_object, MyObject) True sage: # Assume arg does not correspond to the specific case: sage: isinstance(my_object, MyObject_specific_case) False sage: isinstance(my_object, MyObject) True ``` My question is: what is the idiomatic way to do this? Naively, one could use a function that takes `arg` as argument, but we would want both the function and the class to be named `MyObject`, so there is a collision. From what I understand, Sage typically uses a class along the lines of `UniqueRepresentation` or `UniqueFactory`. However, those seem to do way more than what I ask (https://doc.sagemath.org/html/en/reference/structure/sage/structure/unique_representation.html, https://doc.sagemath.org/html/en/reference/structure/sage/structure/factory.html), and I am a bit lost. P.-S. : In real life, `MyObject` is `FiniteDrinfeldModule` and ` MyObject_specific_case` is `FiniteDrinfeldModule_rank_two` (see https://trac.sagemath.org/ticket/33713). -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/92c5b512-f235-474b-ab18-6f4e26dacbf9n%40googlegroups.com.