J'ai besoin de ça pour débugger mon jeu et afficher quel instance gère l'objet avec lequel je suis en collision sur le moment, ça me permet de mieux le retrouver par la suite dans mon amas de class si j'ai besoin de le modifier par exemple.
def get_name(v):
for lv in locals():
if eval(lv) is v:
return lv
Ce n'est pas très élégant, et avoir besoin d'une telle fonction ça ne sent pas très bon.
Je ne suis pas sûr que ça marche (tu peux avoir des alias et de l'interning).
Liyon42 a écrit:
J'ai besoin de ça pour débugger mon jeu et afficher quel instance gère l'objet avec lequel je suis en collision sur le moment, ça me permet de mieux le retrouver par la suite dans mon amas de class si j'ai besoin de le modifier par exemple.
Tu sembles typiquement dans le cas d'application des chaînes formatées en mode debug (ne marche que depuis Python 3.8), je l'explique ici et si tu préfères la doc officielle, c'est là.
Non t'as pas besoin de ça !!! Tu utilises les outils qui existent comme pdb par exemple, ou aussi les outils existants sur des IDE tels que PyCharm ou VS Code par exemple qui ont leur propre debugger.
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)
Merci pour le lien mais cela ne fait pas ce que je souhaite, je veux vraiment pouvoir afficher le nom de la variable, il n'a pas l'air de le proposer…
Dans le coin supérieur gauche de mon écran j'ai affiché ses informations:
Or quand je rentre en collision avec une image (mesh, objets...) le text No collision object doit se remplacer par le nom de la variable gérant l'instance de l'objet touché.
Je sais déjà tout faire mais pas récupérer le nom de la variable c'est tout ce que je demande.
Il y a pas un soucis de logique ? Quand tu rentres en collision, le texte No collision object s'affiche ?
Non je ne comprend pas le besoin, et d'ailleurs je ne comprend pas pourquoi récupérer le nom de la variable plutôt que sa valeur...
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)
Voilà dans mon script ce qui initialise un coffre avec ces coordonnées sur la map entre autre:
Quand je suis en collision avec lui je veux qu'à la place de No collision object, cela affiche le nom de la variable, en l'occurrence: chest1.
Ceci me permettra de retrouver quelle instance du coffre je pointe et ainsi ne pas me perdre, imagine si je possède 20 coffres sur la map actuel et que je doit savoir en tâtonnant lequel je pointe entre le premier et le 20ème…
et pourquoi ne pas récupérer sa valeur:
tout simplement parce que c'est une fonction, pas une simple variable associé à un type string
Ça semble le problème de conception à plein nez, car quand je vois self.chest1, je me dis qu'il doit y en avoir un paquet derrière (self.chest2, self.chest3, etc...) et là je dis, utilisation d'une liste pour créer ses instances dynamiquement avec une boucle.
Liyon42 a écrit:
Ceci me permettra de retrouver quelle instance du coffre je pointe et ainsi ne pas me perdre, imagine si je possède 20 coffres sur la map actuel et que je doit savoir en tâtonnant lequel je pointe entre le premier et le 20ème…
Plutôt que de chercher self.chest1, pourquoi tu cherches pas self.chest.id == 1 ?
Tu aurais l'ID de chacun de tes objets et en déduire l'erreur facilement.
En tout cas à mon sens, ce que tu veux n'est pas qu'une mauvaise pratique, mais aussi une mauvaise conception. Je n'ai jamais eu à utiliser cela en 15 ans de Python.
Un simple attribut à ajouter et on construit dynamiquement, puis on retrouve l'ID de l'objet facilement,
class Chest:
def __init__(self, id):
self.id = id
chests = []
for i in range(20):
chest = Chest(i+1)
chests.append(chest)
for chest in chests:
print("ID de chest: {} pour l'objet chest {}".format(chest.id, id(chest)))
# ID de chest: 1 pour l'objet chest 140144129830864
# ID de chest: 2 pour l'objet chest 140144129830672
# ID de chest: 3 pour l'objet chest 140144129830528
# ID de chest: 4 pour l'objet chest 140144129830384
# ID de chest: 5 pour l'objet chest 140144129830240
# ID de chest: 6 pour l'objet chest 140144129830144
# ID de chest: 7 pour l'objet chest 140144129830048
# ID de chest: 8 pour l'objet chest 140144129829952
# ID de chest: 9 pour l'objet chest 140144129829856
# ID de chest: 10 pour l'objet chest 140144129829760
# ID de chest: 11 pour l'objet chest 140144129829664
# ID de chest: 12 pour l'objet chest 140144129829568
# ID de chest: 13 pour l'objet chest 140144129829472
# ID de chest: 14 pour l'objet chest 140144129829376
# ID de chest: 15 pour l'objet chest 140144129829280
# ID de chest: 16 pour l'objet chest 140144129828608
# ID de chest: 17 pour l'objet chest 140144129828512
# ID de chest: 18 pour l'objet chest 140144129828416
# ID de chest: 19 pour l'objet chest 140144129828320
# ID de chest: 20 pour l'objet chest 140144129828224
- Edité par fred1599 17 juin 2021 à 9:47:27
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)
Si tu glisses le curseur de ta souris en haut à droite de ton premier ou dernier (je sais plus) tu devrais voir s'afficher le bouton il me semble.
- Edité par fred1599 17 juin 2021 à 10:31:56
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)
à défaut d'id, tu peux lui rajouter un attribut name dans lequel tu mettras le nom de ta variable
Tout à fait, on peut tout, mais surtout éviter la pratique présentée par le PO au départ de sa discussion. Les idées sur une solution pour détecter un objet sont nombreuses.
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)
Et merci bien pour l'id ça fonctionne vraiment niquel, j'ai compris mon erreur de base, que je prenais le problème dans le mauvais sens
Récupérer en type string le nom d'une variable
× 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.
typage structurel ftw
Découverte Python Doc Tkinter Les chaînes de caractères
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)
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)
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)