2010-05-18 5 views
0

J'ai un script Python et je veux l'appeler plusieurs fonctions dans le script. Exemple de code ci-dessous:Comment démarrer un script Python plusieurs fonctions dans

class Name(): 

    def __init__(self): 
     self.name = 'John' 
     self.address = 'Place' 
     self.age = '100' 

    def printName(self): 
     print self.name 

    def printAddress(self): 
     print self.address 

    def printAge(self): 
     print self.age 

if __name__ == '__main__': 
    Person = Name() 
    Person.printName() 
    Person.printAddress() 
    Person.printage() 

J'exécute ce code en entrant ./name.py. Comment puis-je exécuter ce code à partir de la fonction printAddress() à la fin du script?

Merci

+3

Je ne comprends pas vraiment la question. Vous souhaitez exécuter le script de manière récursive? – extraneon

Répondre

3

Si vous demandez comment pouvez-vous lancer votre script Python et le faire commencer à exécuter à différentes positions alors vous devrez lancer le script wi Quelques informations sur ce que vous voulez faire. La façon la plus courante de le faire serait d'ajouter un support pour les arguments de la ligne de commande.

import sys 

if __name__ == '__main__': 

    for arg in sys.argv: 
     print arg 

Si vous deviez exécuter le script ci-dessus de la ligne de commande par lui-même, il ne ferait rien, mais si vous lancez avec quelques paramètres supplémentaires, tels que

./launch.py my_argument another_argument and_so_on 

Vous verrez le script a accès aux arguments de lancement supplémentaires via la liste sys.argv. En utilisant ceci, vous pouvez vérifier les arguments passés au lancement et ensuite commencer à exécuter votre script à l'endroit désiré.

Un exemple avec votre script pourrait être le suivant

import sys 

class Name: 

    def __init__(self): 
     self.name = 'John' 
     self.address = 'Place' 
     self.age = '100' 

    def printName(self): 
     print self.name 

    def printAddress(self): 
     print self.address 

    def printAge(self): 
     print self.age 


if __name__ == '__main__': 

    Person = Name() 

    launchOptions = sys.argv[1:] 

    if not launchOptions or 'name' in launchOptions: 
     Person.printName() 

    if not launchOptions or 'address' in launchOptions: 
     Person.printAddress() 

    if not launchOptions or 'age' in launchOptions: 
     Person.printAge() 

La gamme sur le sys.argv [1:] est parce que la première entrée dans le sys.argv sera le chemin du script lancé.

Vous pouvez lancer cet exemple et obtenir les résultats suivants

./launch 
John 
Place 
100 

./launch age 
100 

./launch address 
Place 

./launch name 
John 

Maintenant, c'est juste un exemple très basique. Si vous décidez d'aller plus loin dans cette direction, il peut vous être utile de lire le pythons getopt module. C'est un analyseur pour les options de ligne de commande.

J'espère avoir bien compris la question.

+0

Après avoir lu les autres réponses, je ne sais plus quelle pourrait être la vraie question. – JoeyJoeJoe

+0

@jamescg - Non, c'est parfait. Désolé pour la question déroutante mais cette réponse est sur place. Merci +1 – chrissygormley

1

Je ne recommanderais pas vous auriez réellement le faire, car il est une fonction récursive sans fin de cette façon, mais il peut être fait :)

class Name(): 

    def __init__(self): 
     self.name = 'John' 
     self.address = 'Place' 
     self.age = '100' 

    def printName(self): 
     print self.name 

    def printAddress(self): 
     print self.address 
     main() 

    def printAge(self): 
     print self.age 

def main(): 
    Person = Name() 
    Person.printName() 
    Person.printAddress() 
    Person.printage() 

if __name__ == '__main__': 
    main() 
+0

Je ne comprends pas ce qui est répondu ici. Le code est peut-être mieux organisé mais comment est-il lié à la question et quelle est la question avant tout? – joaquin

+0

@Joaquin La façon dont j'ai lu la question ressemblait plus à: Comment recommencer la méthode principale depuis printAddress. Ce qui n'a pas beaucoup de sens pour moi (j'ai commenté la question), mais pourrait être répondu :) – extraneon

+0

droite, ce n'était pas facile. au moins quelqu'un l'a enfin compris – joaquin

0

La ligne

Person = Name() 

indique que le nom de la classe doit effectivement être Person. Supprimez les méthodes printXXX entièrement et ajoutez une méthode __repr__ à la place, par ex. comme

def __repr__(self): 
    return "%s\n%s\n%s" % (self.name, self.address, self.age) 

Enfin, je vous recommande d'ajouter le nom, l'adresse et l'âge à la liste des paramètres acceptés par init:

def __init__(self, name, address, age): 
    ... 

Après l'instanciation d'un objet Person, vous pouvez simplement l'imprimer:

person = Person() 
print person 
+0

Pour une utilisation en impression, __str__ pas __repr__. __repr__ est utilisé pour la sérialisation (bien que dans certains cas ils puissent être les mêmes) – Mark

Questions connexes