Posté par FantastIX .
En réponse au message détecter \.
Évalué à 2.
Dernière modification le 14 juin 2020 à 14:38.
les méthodes de classe servent notamment à ce que les instanciations puissent "communiquer" entre elles [...]
Pas exactement et pas que. La différence entre une méthode de classe et une méthode tout court est ce que j'entendrais par "rangement" fonctionnel: tu définis une méthode lorsque le traitement s'applique à un objet d'une classe et tu définis une méthode de classe lorsque ce traitement est "porté" par la classe voire commun à toutes les instances.
En clair, une instance possède par définition un état, réparti sur une ou plusieurs variables internes. Chaque instance d'une classe se trouve dans un état indépendant des autres. Les méthodes gèrent l'état de l'instance à laquelle elles sont rattachées.
Une classe peut aussi très bien avoir un état. Cet état est indépendant des instances de la classe et se gère à travers des méthodes de classe. Cette situation est toutefois moins fréquente et doit être réfléchie. Je n'ai pas d'exemple suffisamment parlant à donner pour le moment mais en somme quand définir une méthode de classe ou une méthode dépend de ce que tu veux faire — il est très difficile d'être plus précis sans exemple.
Quant à choisir une fonction définie dans la portée d'une classe (exemple de foo()) plutôt qu'une méthode de classe, je dirais que la seconde est plus propre et prépare mieux le terrain à la manipulation des membres de la classe que la première.
... quel est l'intérêt pour un programme python de définir [la fonction foo()] à l'intérieur de Foo? on ne pourra l'utiliser que si un objet de classe Foo est instancié, c'est bien ca?
Non. Elle peut être appelée, comme tu l'as vu, via le nom de la classe, que des instances existent ou non. De plus, comme je l'ai insinué, foo() est plus proche d'une méthode de classe que d'une méthode.
Cependant il est plus compliqué de gérer l'état d'une classe et de sa descendance avec une fonction comme foo() car elle n'a accès aux membres d'une classe qu'à travers le nom, explicite, de cette classe (la sienne, par exemple). Si la classe Foo est dérivée, foo() ne pourra pas en manipuler l'état.
[^] # Re: ok
Posté par FantastIX . En réponse au message détecter \. Évalué à 2. Dernière modification le 14 juin 2020 à 14:38.
Pas exactement et pas que. La différence entre une méthode de classe et une méthode tout court est ce que j'entendrais par "rangement" fonctionnel: tu définis une méthode lorsque le traitement s'applique à un objet d'une classe et tu définis une méthode de classe lorsque ce traitement est "porté" par la classe voire commun à toutes les instances.
En clair, une instance possède par définition un état, réparti sur une ou plusieurs variables internes. Chaque instance d'une classe se trouve dans un état indépendant des autres. Les méthodes gèrent l'état de l'instance à laquelle elles sont rattachées.
Une classe peut aussi très bien avoir un état. Cet état est indépendant des instances de la classe et se gère à travers des méthodes de classe. Cette situation est toutefois moins fréquente et doit être réfléchie. Je n'ai pas d'exemple suffisamment parlant à donner pour le moment mais en somme quand définir une méthode de classe ou une méthode dépend de ce que tu veux faire — il est très difficile d'être plus précis sans exemple.
Quant à choisir une fonction définie dans la portée d'une classe (exemple de
foo()) plutôt qu'une méthode de classe, je dirais que la seconde est plus propre et prépare mieux le terrain à la manipulation des membres de la classe que la première.Non. Elle peut être appelée, comme tu l'as vu, via le nom de la classe, que des instances existent ou non. De plus, comme je l'ai insinué,
foo()est plus proche d'une méthode de classe que d'une méthode.Cependant il est plus compliqué de gérer l'état d'une classe et de sa descendance avec une fonction comme
foo()car elle n'a accès aux membres d'une classe qu'à travers le nom, explicite, de cette classe (la sienne, par exemple). Si la classeFooest dérivée,foo()ne pourra pas en manipuler l'état.