Ce que tu peux faire, c'est écrire une méthode de classe dans ta classe Eleve qui renvoie la résultat escompté. Ensuite tu peux appeler la méthode depuis ta classe ou une instance :
class Eleve:
def __init__(self, name):
self.name = name
@classmethod
def get_instance_name(cls):
return [v_name for v_name, value in globals().items() if isinstance(value, cls)]
On créé des instances :
cor = Eleve("Corentin")
tit = Eleve("Titouan")
Tu peux ensuite appeler ta méthode depuis les instances ou la classe :
cor.get_instance_name()
tit.get_instance_name()
Eleve.get_instance_name()
['tit', 'cor']
Le startswith c'est parce que Python créé également des instance de Eleve pour son cache (du genre _15).
Si tu tapes globals(), tu verras un dictionnaire qui contient toutes les variables créées par toi-même et la machine virtuelle de Python.