CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Python classe

ViIIeurbannais
ViIIeurbannais
Niveau 54
10 janvier 2017 à 23:19:57

Bonsoir,
J'ai un petit problème:

class Compteur:
... objets_crees = 0 
... def __init__(self):
.......Compteur.objets_crees += 1
... def test:
......Compteur.objets_crees -= 1

En gros j'aimerais que lorsque j'appelle la méthode test en faisant:

P = Compteur()
P.test

Que objects_crees soit diminuée de 1, mais je sais pas comment faire car ça le diminue de 1 mais uniquement dans la fonction test, je veux que ça soit global, j'ai essayé:

class Compteur:
... objets_crees = 0 
... def __init__(self):
.......Compteur.objets_crees += 1
... def test:
......Global Compteur.objets_crees
......Compteur.objets_crees -= 1

Mais ça fonctionne pas [[sticker:p/1lmk]], si vous avez des idées voir la solution je suis preneur, merci d'avance :-)

LGV
LGV
Niveau 28
10 janvier 2017 à 23:27:24

Je ne connais pas le Python, mais ce que tu cherches d'appelle souvent "static" dans les autres langages OOP ; une donnee membre static est une donnee partagee par toutes les instances de la classe. La modifier modifie la valeur pour toutes les instances. Regarde si tu trouves qqch comme ca en Python

Message édité le 10 janvier 2017 à 23:28:16 par LGV
MrGreez94
MrGreez94
Niveau 10
11 janvier 2017 à 00:08:28

Salut :)

Je te conseille de jeter un coup d'oeil par ici : http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/object_oriented_framework/class_attributes.php

La difficulté de ton problème réside dans l'accès de l'attribut de classe.

  • self est une référence vers l'objet courant. Au sein de la classe Compteur, il fait référence à un objet de type Compteur
  • __class__ est un attribut commun à tout instance en python, qui est une référence vers la classe dont l'objet est l'instance.

self.__class__ fait donc référence à la classe dont l'objet courant est l'instance. A l'intérieur de la classe Compteur, cela retourne une référence vers la classe Compteur elle-même.

Si tu mets en application tout ça, tu arrives à quelque chose qui ressemble à ça: http://pastebin.com/86Ci8uWN

ViIIeurbannais
ViIIeurbannais
Niveau 54
11 janvier 2017 à 10:14:41

Le 11 janvier 2017 à 00:08:28 MrGreez94 a écrit :
Salut :)

Je te conseille de jeter un coup d'oeil par ici : http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/object_oriented_framework/class_attributes.php

La difficulté de ton problème réside dans l'accès de l'attribut de classe.

  • self est une référence vers l'objet courant. Au sein de la classe Compteur, il fait référence à un objet de type Compteur
  • __class__ est un attribut commun à tout instance en python, qui est une référence vers la classe dont l'objet est l'instance.

self.__class__ fait donc référence à la classe dont l'objet courant est l'instance. A l'intérieur de la classe Compteur, cela retourne une référence vers la classe Compteur elle-même.

Si tu mets en application tout ça, tu arrives à quelque chose qui ressemble à ça: http://pastebin.com/86Ci8uWN

Merci c'est exactement ce que je cherchais, je connaissais pas l'astuce avec __class__, merci à tout les deux :-)

Blaff2
Blaff2
Niveau 10
11 janvier 2017 à 23:13:58

Euh... Là il va falloir m'expliquer un truc. :(

Je ne comprends pas du tout l'utilité de recourir à l'attribut __class__.

En fait, je ne saisi même pas quel est ton problème, l'auteur.

class Compteur:
    objets_crees = 0
    def __init__(self):
        Compteur.objets_crees += 1
 
    def test(self):
        Compteur.objets_crees -= 1
 
print(Compteur.objets_crees) # 0
p = Compteur()
print(Compteur.objets_crees) # 1
p = Compteur()
print(Compteur.objets_crees) # 2
p.test()
print(Compteur.objets_crees) # 1

Ceci est la même version que ce que tu as essayé : en utilisant Compteur.objets_crees j'obtiens exactement le même résultat qu'avec Compteur.__class__.object_crees.

:doute:

Tu es sûr que le problème ne vient pas d'ailleurs, par exemple tu fais que tu avais déclaré et que tu utilisais test sans les parenthèses ?

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment