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.

Reply via email to