2010-06-01 16 views
5

Tengo poco problema con la importación de clases en python. Mi flujo de trabajo es el siguienteimportando clase y su función desde otro archivo

index.py 

    class Template: 

     def header(): 
     def body(): 
     def form(): 
     def footer(): 

display.py 

Quiero función header(), body() y footer() llamar a mi página de display.py. ¿Alguien me aclarará este problema en Python? Gracias por tu preocupación.

archivo de índice --- [Index.py] [1]

[1]: http://pastebin.com/qNB53KTE y display.py - "http://pastebin.com/vRsJumzq"

+5

Te recomiendo que lea sobre más tutoriales de Python. Un montón de ejemplos por ahí. '=]' –

+1

Además, tenga en cuenta que la guía de estilo de Python (http://www.python.org/dev/peps/pep-0008/) recomienda utilizar CapWords en nombres de clase, no en letras minúsculas. –

+1

¡Gracias por el código! no podríamos haberlo resuelto de otra manera. Ahora ve a aceptar más respuestas. = 3 –

Respuesta

2

En la parte inferior de su archivo de índice crea un objeto HtmlTemplate y llama a todos los métodos que contiene. Como este código no está contenido en ningún otro bloque, se ejecuta al importar el módulo.Debe eliminarlo o verificar si el archivo se está ejecutando desde la línea de comandos.

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

no estoy seguro de si he entendido bien, pero Creo que está preguntando cómo importar la clase template en otra secuencia de comandos. La declaración import es lo que necesita:

from index import template 

foo = template() 

foo.header() 
foo.body() 
foo.footer() 
+1

hay un par de errores tipográficos aquí, que hacen que tu respuesta sea completamente absurda. – SilentGhost

+0

@Sil: La primera revisión de mi respuesta fue bastante problemática. Si no fuera por la característica molesta "¿eres humano?", Los errores tipográficos se habrían solucionado antes de tu comentario :) –

7

¿Qué ha intentado? La siguiente sería una forma normal de usar los métodos de la clase Template después de la importación.

from index import Template 

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

ETA: al final de sus index.py de archivo (líneas 99-105) que está llamando a todas las funciones de la clase Template anteriormente definido. Es por eso que estás viendo duplicados.

+1

He intentado lo mismo que tú. pero siempre obtengo repeticiones como 2 veces cuerpo() etc. – MysticCodes

+0

@usuario: probablemente estés llamando a métodos del 'template''s' __init__'. De lo contrario, no hay nada en este código que produzca duplicados. – SilentGhost

+0

He dado el enlace para mis archivos gracias – MysticCodes

1

Edit: De acuerdo, veo cuál es su problema, dado su código.

Estás llamando la siguiente:

## Calling all the functions of the class template with object (objx) 
objx=HtmlTemplate() 
objx.Header() 
objx.Body() 
objx.Form() 
objx.Footer() 
objx.CloseHtml() 

Y luego, en su display.py:

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

Vea cómo Body() es llamada dos veces?

Como nota al pie, debe usar minúsculas para los nombres de métodos y palabras capitales para las clases como lo está haciendo ahora. Es una buena convención. Lo recomiendo mucho

Simplemente debe construir el objeto una vez en display.py y llamar a todos los métodos.

+0

sí, cada función tiene parámetro propio que soy consciente de – MysticCodes

+0

¿Qué otros problemas tienes? ¿Puede proporcionarnos más código? –

+0

Al igual que mi flujo de trabajo anterior, tengo el archivo index.py [con la clase y las funciones especificadas] y desde el archivo index.py quiero pasar los valores de form() a display.py. En display.py necesito llamar solo a header(), body() y footer(). Pero estoy haciendo las mismas cosas que ustedes dijeron, pero obtuve repetición en la página de visualización. La página de visualización se muestra como this- header(), body(), form(), footer() y nuevamente body() y algún otro elemento de la página de visualización. – MysticCodes

1

tiene el código siguiente en la parte superior y la parte inferior de index.py:

cgitb.enable() 
print 'Content-type: text/html\n\n' 
print "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/msa.css\" >" 

# [...] 

## Calling all the functions of the class template with object (objx) 
objx=HtmlTemplate() 
# [...]  
objx.CloseHtml() 

Esto se llama cada vez que import index.

Para evitar que esto ocurra, la puso en un bloque de este modo:

if __name__ == '__main__': 
    cgitb.enable() 
    print 'Content-type: text/html\n\n' 
    print "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/msa.css\" >" 

    # [...] 

    ## Calling all the functions of the class template with object (objx) 
    objx=HtmlTemplate() 
    # [...]  
    objx.CloseHtml() 

... o mejor aún poner este código funciones que pueden ser llamadas desde otros lugares.

+0

Okei he proporcionado el código fuente del archivo por encima de – MysticCodes

+0

¡Nueva respuesta proporcionada! – Johnsyweb

+0

Parece que funciona, pero sigue con un error: en display.py recibo "Content-type: text/html" en la parte superior – MysticCodes

1

La solución a continuación trabajó para mí:

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

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