Je lis un livre où ils utilisent une classe Python comme conteneur pour regrouper plusieurs fonctions dans un groupe. La classe ne sera jamais instanciée. Pour les méthodes de cette classe, il n'y a pas de paramètre cls ou self (cela m'a dérouté). Étant donné que je connais les classes (qui seront/pourraient être instanciées) et @classmethods, je me demande s'il existe un nom et une directive PEP pour ce type de classes qui ne seront jamais instanciées ?

Le même espacement de noms pourrait être obtenu en plaçant ces méthodes dans différents fichiers au lieu d'une classe. Mais il y a peut-être une bonne raison de préférer un cours à cet effet ?

Dans l'exemple ci-dessous, vous pouvez voir que les méthodes 'addition' et 'addition_2' se comportent de manière similaire, sauf lorsque la classe sera instanciée (bien sûr). Il semble donc que vous n'ayez pas besoin des paramètres @classmethod et cls dans le cas où vous n'instancierez jamais cette classe. Mais est-ce une bonne pratique ?

# python 3.8.5
class Operations:

    @classmethod
    def addition(cls, value, value_2):
        print(value + value_2)

    def addition_2(value, value_2):
        print(value + value_2)


Operations.addition(value=3, value_2=5)  # 8
Operations.addition(3, 5)  # 8
Operations().addition(value=3, value_2=5)  # 8
Operations().addition(3, 5)  # 8

Operations.addition_2(value=3, value_2=5)  # 8
Operations.addition_2(3, 5)  # 8

# expected errors:
Operations().addition_2(value=3, value_2=5)  # TypeError: addition_2() got multiple values for argument 'value'
Operations().addition_2(3, 5)  # TypeError: addition_2() takes 2 positional arguments but 3 were given
0
Vromance 14 oct. 2020 à 17:53

1 réponse

Meilleure réponse

Vous pouvez avoir une classe qui ne sera jamais instanciée et qui est simplement un conteneur de fonctions :

class Operations:

    @staticmethod
    def addition(value, value_2):
        print(value + value_2)

    @staticmethod
    def subtraction(value, value_2):
        print(value + value_2)

Cependant, comme d'autres l'ont dit, ce n'est pas vraiment la meilleure pratique et vous pouvez simplement stocker ces fonctions dans un module différent à la place, c'est-à-dire un fichier .py appelé opérations que vous utilisez en l'important :

import operations

operations.addition(1, 2)
0
Rolv Apneseth 14 oct. 2020 à 15:32