2017-05-31 8 views
-1

Est-il possible de catégoriser les fonctions afin que je puisse appeler une fonction comme ceci:Python catégoriser les fonctions

category something(): 
    def test(): 
     [Code] 

    def test2(): 
     [Code] 

something.test() 
something.test2() 

Je pensais à l'aide de classes, mais il semble qu'ils ont toujours besoin d'une instance par exemple soi en tant qu'attribut. Si je me trompe, n'hésitez pas à me corriger, je suis un peu nouveau sur python et je n'ai pas beaucoup d'expérience.

Pour l'instant, j'ai utilisé des fichiers différents pour cela, mais j'ai souvent rencontré des problèmes de dépendance circulaire et je voulais savoir s'il y avait une solution facile à ce problème. Ceci permet de nettoyer un peu le code et de savoir à quelle partie d'une scipt une fonction peut appartenir lorsque vous avez beaucoup de code.

+0

Quel est le but des fonctions « catégoriser » ? Voulez-vous créer 2 fonctions avec le même nom? Ou simplement les organiser de manière à ce qu'ils appartiennent à la même "chose/catégorie"? –

Répondre

0

Vous n'avez pas réellement besoin d'une instance - vous pouvez déclarer chaque méthode que (ou, en fait, la transformer en) une méthode « statique »:

class Foo: 

    @staticmethod 
    def Bar(x, y): 
     return x + y 

    @staticmethod 
    def Baz(x, y): 
     return x - y 

print(Foo.Bar(3, 4)) 

L'interprétation du premier argument comme référence à l'instance (classiquement, mais pas nécessairement, appelé self) ne se produit pas dans les méthodes statiques. Mais la création de classes remplies de méthodes statiques serait une utilisation quelque peu hors-étiquette de class. La façon la plus commune de classer les ressources en Python est de les diviser en modules and packages (c.-à-fichiers séparés et/ou répertoires):

# in Foo.py 
def Bar(x, y): 
    return x + y 

puis:

>>> import Foo 
>>> Foo.Bar(3, 4) 
7 
+0

alors je vais devoir écrire @staticmethod en face de chaque fonction que je définis? Ou puis-je faire une classe entière dans les méthodes statiques en l'ajoutant quelque part au début? –

+0

Vous devriez utiliser le décorateur à chaque fois. Mais vraiment: ne le faites pas comme ça. Utilisez des modules comme le reste d'entre nous. – jez