Bonjour, dans le cadre d'un jeu, j'aimerais dès que j'initialise l'objet de classe, je stock son nom dans une liste. J'ai cherché mais je n'ai pas trouvé. Il y a t-il un moyen ?
C'est à dire quand on initialise un objet, par exemple la classe est Test(), on va écrire test1 = Test()
Comment récupérer le nom test1 ?
C'est vous qui codez... et décidé du nom de la variable test1 que vous allez pouvoir réutiliser par la suite. Au cas où vous l'auriez oublié, vous pouvez toujours relire le code pour le retrouver. L'intérêt de la chose est assez limité sauf à vouloir créer des fonctionnalités de debug très spécifiques.
Si le besoin est d'associer l'instance à une chaine de caractère créer un attribut name et dictionnaire D pour écrire D['test1"] = Test('test1') quitte à faire de D un attribut de la classe Test. Du coup les instances ont un nom et une collection qui permet de... (reste à gérer les doublons).
D'accord tout ça j'y avait déjà pensé mais ce que je voulais savoir c'est est-ce qu'on peut faire ça:
elements = []
class Test():
def __init__(self):
elements.append("<nom de l'objet>")
test1 = Test()
test2 = Test()
print(elements)
>>> [test1, test2]
Le "print" affiche une représentation de la liste sur le terminal... Si on veut que ça affiche les élements de la liste ainsi pourquoi pas? Ce qui est sûr c'est que çà ne le fera pas tout seul (il va falloir coder) et que ça ait un intérêt (pour se motiver à coder).
On peut écrire:
class Test:
id = 0
def __init__(self):
Test.id += 1
self.id = Test.id
def __repr__(self):
return f'Test{self.id}'
L = [ Test() for _ in range(3) ]
print(L)
D'accord tout ça j'y avait déjà pensé mais ce que je voulais savoir c'est est-ce qu'on peut faire ça:
elements = []
class Test():
def __init__(self):
elements.append("<nom de l'objet>")
test1 = Test()
test2 = Test()
print(elements)
>>> [test1, test2]
Le "print" affiche une représentation de la liste sur le terminal... Si on veut que ça affiche les élements de la liste ainsi pourquoi pas? Ce qui est sûr c'est que çà ne le fera pas tout seul (il va falloir coder) et que ça ait un intérêt (pour se motiver à coder).
On peut écrire:
class Test:
id = 0
def __init__(self):
Test.id += 1
self.id = Test.id
def __repr__(self):
return f'Test{self.id}'
L = [ Test() for _ in range(3) ]
print(L)
ça affiche [Test1, Test2, Test3] et voilà
D'accord je vois le principe.
Mais il n'y a vraiment aucun moyen de récupérer le nom sans passer par un nom avec incrémentation ?
Mais il n'y a vraiment aucun moyen de récupérer le nom sans passer par un nom avec incrémentation ?
Et si ça existait quels problèmes ça va (vous) aider à résoudre?
Programmer, c'est juste trouver des solutions avec les possibilités qu'offre un langage. Si une fonctionnalité n'existe pas, est ce que c'est parce que le langage est mal foutu (et on devrait trouver des langages qui permettent de...), soit parce que la philosophie de Python fait qu'on peut faire aussi bien autrement sinon mieux. Et on retombe sur la question initiale: quel problème voulez vous résoudre?
On peut tout faire en Python, même des choses moches et inutiles
class A:
def get_name(self):
return [k for k, v in globals().items() if isinstance(eval(k), type(self))]
a = A()
print(a.get_name()) # ['a']
b = A()
print(b.get_name()) # ['a', 'b']
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
On peut tout faire en Python, même des choses moches et inutiles
class A:
def get_name(self):
return [k for k, v in globals().items() if isinstance(eval(k), type(self))]
a = A()
print(a.get_name()) # ['a']
b = A()
print(b.get_name()) # ['a', 'b']
Ça fonctionne mais je ne comprend pas le fonctionnement
Ça fonctionne mais je ne comprend pas le fonctionnement
globals() est le dictionnaire qui contient les variables globales du module, çà trouve les clefs associées à une instance de... et plein de problèmes comme:
a = A()
print(a.get_name()) # ['a']
b = a
print(b.get_name()) # ['a', 'b']
ou:
def f():
x = A()
return x
a = f()
print(a.get_name()) # ['a']
b = A()
print(b.get_name()) # ['a', 'b']
On peut tout faire en Python, même des choses moches et inutiles
class A:
def get_name(self):
return [k for k, v in globals().items() if isinstance(eval(k), type(self))]
a = A()
print(a.get_name()) # ['a']
b = A()
print(b.get_name()) # ['a', 'b']
Ça fonctionne mais je ne comprend pas le fonctionnement
Eh bien tant mieux, c'est juste une curiosité justement pour ceux qui savent que ce n'est pas une bonne pratique. Mon but ici est de démontrer que tout est faisable, même ce qui n'est pas conceptuellement correct de faire. De ton côté si tu veux en savoir plus, tu peux regarder la documentation sur
globals
eval
dictionnaires (dict)
listes (list)
type
isinstance
Aussi tu peux faire un petit test sur chaque fonctionnalité avec ton intepréteur python (sans IDE ! Seulement l'interpréteur en espérant que tu vois la distinction).
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Mon but ici est de démontrer que tout est faisable, même ce qui n'est pas conceptuellement correct de faire.
Conceptuellement c'est une intention pour essayer de résoudre un problème, ce qui fait cruellement défaut ici.
On ne sait pas quel problème on cherche à résoudre sinon trouver une fonctionnalité magique dont on ne sait trop à quoi elle pourrait servir... Après on peut toujours bricoler un truc pour montrer que face à un problème, on peut toujours bricoler quelque chose - ce qui est un peu le but de la programmation - qui fonctionnera avec plus ou moins de limites.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)