7
votes

Importation de classe et sa fonction d'un autre fichier

J'ai peu de problème avec l'importation de cours à Python. Mon flux de travail va comme celui-ci xxx

Je veux appeler fonction en-tête () , corps () et footer () dans mon display.py page. Quelqu'un me fera-t-il clairement sur cette question dans Python. Merci de votre préoccupation.

fichier d'index --- [index.py] [1]

[1]: http://pastebin.com/qnb53kte et display.py -" http: //pastebin.com/vrsjumzq "


3 commentaires

Je vous recommande de lire plus de tutoriels Python. Beaucoup d'exemples là-bas. =]


En outre, veuillez noter que le guide de style Python ( python.org/dev/peps/pep -0008 ) recommande d'utiliser des mots-clés dans les noms de classe, pas toutes les lettres minuscules.


Merci pour le code! Nous n'aurions pas pu le comprendre autrement. Maintenant, allez accepter plus de réponses. = 3


6 Réponses :


1
votes

Je ne sais pas si je vous comprends correctement, mais je crois que vous vous demandez comment importer le modèle code> Classe Code> dans un autre script. L'instruction code> Importation code> est ce dont vous avez besoin:

from index import template

foo = template()

foo.header()
foo.body()
foo.footer()


2 commentaires

Il y a quelques fautes de frappe ici, cela rend votre réponse complètement absurde.


@Sil: La première révision de ma réponse était en effet assez buggy. Si ce n'était pas pour la fonctionnalité ennuyeuse "Êtes-vous humain", les fautes de frappe auraient été réparées avant votre commentaire :)



8
votes

Qu'avez-vous essayé? Ce qui suit serait une manière normale d'utiliser des méthodes de modèle code> de classe code> après l'importation.

from index import Template

t = Template()
t.header()
t.body()
t.footer()


2 commentaires

J'ai essayé la même chose comme tu l'as fait. mais je reçois toujours une répétition comme 2 fois le corps () etc.


@user: Vous appelez probablement des méthodes à partir du modèle 'S __ init __ . Sinon, rien dans ce code ne produirait de duplicata.



2
votes

EDIT: strong> d'accord, je vois quel est votre problème, étant donné votre code.

Vous appelez ce qui suit: p>

t = HtmlTemplate()
t.Header()
t.Body()


9 commentaires

ouais chaque fonction a un paramètre soi-même dont je suis conscient de


Quels autres problèmes avez-vous? Pouvez-vous nous fournir plus de code?


Comme mon flux de travail ci-dessus, j'ai un fichier index.py [avec une classe et des fucntions donnés] et du fichier index.py, je veux passer des valeurs de formulaire () à afficher.py. Dans display.py, je dois appeler seulement l'en-tête (), le corps () et le pied de page (). Mais je fais les mêmes choses comme vous l'avez dit, mais j'ai une répétition dans la page d'affichage. La page d'affichage va comme ça - Hauteur (), Corps (), Formulaire (), Footer () et retour Corps () et un autre cotent de la page d'affichage.


@user: Nous devons voir le code réel de la classe de votre modèle et de ses méthodes. Nous ne sommes pas des médiums.


@ user343934: si vous appelez corps () deux fois, vous vous attendez certainement à la sortie du corps Corps () deux fois ...


@ user343934: umm, vous avez appelé corps () à nouveau?


@ user343934: merci pour la pâtebine. Vous avez vu comme c'était facile? :]


Je veux dire dans l'affichage.py je peux trouver le corps, former des répétitions


@ user343934: parce que tout devient "exécuté" lorsque vous l'importaez. Voir ma réponse modifiée.



1
votes

Vous avez le code suivant en haut et en bas de index.py : xxx

ceci sera appelé chaque fois que vous index d'importation < /code >.

Pour éviter que cela se produise, mettez-le donc dans un bloc ainsi: xxx

... ou mieux mettre ce code Fonctions qui peut être appelée d'ailleurs.


3 commentaires

Il semble fonctionner mais toujours avec une erreur qui dans display.py je reçois "type de contenu: texte / html" en haut


Oui ... ce code est également tiré avec le module. J'ai inclus cela dans ma réponse révisée.


@ user343934: Ouais, car vous auriez dû mettre le type de contenu également dans une syntaxe appropriée HTML.



2
votes

Au bas de votre fichier d'index, vous créez un objet htmltemplate code> et appelez toutes les méthodes à ce sujet. Étant donné que ce code n'est contenu dans aucun autre bloc, il est exécuté lorsque vous importez le module. Vous devez soit le supprimer ou vérifier si le fichier est en cours d'exécution à partir de la ligne de commande.

if __name__ == "__main__":
    objx=HtmlTemplate()
    objx.Header()
    objx.Body()
    objx.Form()
    objx.Footer()
    objx.CloseHtml()


0 commentaires

1
votes

La solution ci-dessous a fonctionné pour moi:

class1(unittest.TestCase):
   def method1(self)

class2(unittest.TestCase):
   def method2(self):
      instance_name = class1("method1")
      instance_name.method1()


0 commentaires