No creo que haya una gran necesidad de continuar votando, ¡solo estoy tratando de aprender aquí!

One.py

from two import *

ADooDah = Doodah()
something = Thing(ADooDah)

something.DoThis()
something.DoThat
something.DoAnother
if (something.has_done_stuff() == True)
    self.SomeFunction

Two.py

class Thing(var):
    def __init__(self, var)
        self.SomeVar = var

    def has_done_stuff(self):
        while True:
            id, newMessage = SomeVar.get_next_message()
            if id == 0:
                return true
            else:
                return false

Yo obtengo...

Traceback (most recent call last):
  File "C:\One.py", line 9, in <module>
    has_done_stuff = thing.HasDoneStuff()
NameError: global name 'thing' is not defined

EDICIONES: El código fue salpicado de errores. Estaba tratando de mostrar mi situación en lugar de cualquier código real. La escritura apresurada provoca una escritura tonta. ¡Incluso yo no soy tan malo! Bueno, la mayoría del tiempo ;) .

Espero que las ediciones hagan que todo tenga más sentido y ustedes, buenas personas, pueden dejar de enfocarse en los errores de sintaxis locos y explicar un poco más sobre mi problema de alcance (supongo). Soy bastante nuevo en Python / IronPython y las reglas sobre tipos implícitos y alcance ¡Todavía estoy en el proceso de aprendizaje!

Aunque he resuelto mi problema. Gracias. Resultó ser bastante poco relacionado con lo anterior.

-2
tigerswithguitars 26 jul. 2011 a las 13:09

3 respuestas

La mejor respuesta

Doy los siguientes códigos.

No sé para qué serán utilizables ... pero PUEDEN correr.

.

two.py

from time import time

class Thing():
    def __init__(self, var):
        self.SomeVar = enumerate(var)

    def HasDoneStuff(self):
        while True:
            id, newMessage = self.SomeVar.next()
            print newMessage
            print 'id==',id
            return id == 0

    def DoThis(self):
        print "DoThis' result"

    def DoThat(self):
        print 'DoingThat ;;;;;;;;;;;;;;;;;;;;;'

    def DoAnother(self):
        print 'DoAnother time',time()

    def SomeFunction(self):
        print 'Humpty Dumpty sat on a wall'

.

one.py

from two import *


def Doodah(ss):
    return ss.split()

ADooDah = Doodah('once upon a time')

Something = Thing(ADooDah)


Something.DoThis()
Something.DoThat()
Something.DoAnother()

print '\n==========================\n'

while True:
    try:
        if Something.HasDoneStuff():
            Something.SomeFunction()
        print '---------------'
    except StopIteration:
        print "That's all folks"
        break
1
eyquem 26 jul. 2011 a las 10:18

Hay algunos problemas:

Afirma que Thing se define en Two.py. Si es así, debe importarlo así:

from Two import Thing

O (no recomendado):

from Two import *

Luego, necesita class, no Class.

A continuación, debe definir thing, que no ha hecho. Supongo que quieres que thing sea un objeto Thing:

thing = Thing(ADooDah)

Luego está el problema con el if dentro HasDoneStuff al que alguien se ha referido en un comentario, y el hecho de que Thing está incompleto (también mencionado en otra respuesta).

2
juanchopanza 26 jul. 2011 a las 09:19
Something = Thing(ADooDah)

thing.DoThis()

Su thing se llama Something. Además, su clase Thing no tiene ninguno de los métodos a los que llama / no llama (parentes faltantes). Esto es prácticamente un código sin sentido.

3
Jacob 26 jul. 2011 a las 09:16