Journal écrire du code dans le corps d'une classe python

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
5
11
oct.
2024

Découverte que je viens de faire à l'instant : il est possible d'écrire du code dans le corps d'une classe python, et ce code est exécuté automatiquement au chargement du module.

Exemple :

import datetime

class MyClass:
    if datetime.datetime.now().isoweekday() == 5:
        current_day = "trolldi"
        for i in range(10):
            print("TODAY IS", current_day, "!!!!!!!!")
    else:
        current_day = "pas trolldi"

print("current_day:", MyClass.current_day)
$ python3 bla.py
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
TODAY IS trolldi !!!!!!!!
current_day: trolldi

Voila, c'est tout. Bisous et bon weekend à tous !

  • # Petite bizarrerie à noter

    Posté par  (site web personnel, Mastodon) . Évalué à 2 (+1/-0). Dernière modification le 11 octobre 2024 à 18:41.

    >>> class C:
    ...     x = 0
    ...     def meth(self):
    ...             return x
    ... 
    >>> C().meth()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 4, in meth
    NameError: name 'x' is not defined. Did you mean: 'self.x'?
    

    J'ai toujours trouvé ça déconcertant, mais il paraît que c'est intentionnel.

  • # hello

    Posté par  . Évalué à 1 (+0/-0).

    Pour le x is not defined, python est quand meme pas trop mal fait, il te suggere comment corriger le pb

    Sinon, rapport a ces variables de classe, je trouve pas toujours ca tres clair, par exemple:
    ```
    class MyClass:
    my_class_var = "osef"

    a = MyClass()
    print(a.my_class_var)

    b = MyClass()
    b.my_class_var = "osef encore"
    print(b.my_class_var)
    print(a.my_class_var)

    class MyOtherClass:
    my_class_var = []

    z = MyOtherClass()
    z.my_class_var.append('a')
    print(z.my_class_var)

    y = MyOtherClass()
    y.my_class_var.append('b')
    print(y.my_class_var)
    print(z.my_class_var)
    ```
    $ python3 .py
    osef
    osef encore
    osef
    ['a']
    ['a', 'b']
    ['a', 'b']

    Avec un string, on pourrait croire que ca se comporte exactement comme une variable d'instance, mais avec une list, on constate bien que non. Ca me perturbe toujours autant!

    ++
    Gi)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.