
Acceso a funciones desde paquetes y modulos diferentes
Publicado por Antonio (6 intervenciones) el 15/06/2015 18:04:15
El problema lo he resumido en dos programas de dos módulos "mcero.py" y "muno.py" que contiene la superclase "ccero" y subclase "cuno (ccero):" respectivamente con la estructura de paquetes siguiente:
El problema surge cuando "cuno" llama a una función " f01" dentro del paquete muno.py a través de un método de la superclase ccero.fex() que ejecuta un "exec" para ejecutar " f01("cadena..") " que realizar un print, como se puede ver en el código, dando el error:
NameError: name 'f01' is not defined
Entiendo que la función 'f01' al estar en el paquete "muno.py" no es vista por la función de la superclase "ccero.fex()" del paquete mcero.py.
Mi problema consiste en como puedo resolver este problema de visibilidad de una función de la superclase que deba ver una función o clase dentro del paquete de la subclase, ya que estoy desarrollando una aplicación que se repite este problema en los diferentes paquetes, y no me interesa fusionar todo el código en uno solo para solventarlo.
Les dejo el código para que puedan ayudarme a resolverlo.
También es interesante que me puedan decir donde puedo leer algo sobre la integración de paquetes para no repetir este problema o similar.
Gracias.
Módulo mcero.py en paquete "cero"
Módulo muno.py en paquete "uno"
les dejo el archivo rar con el código.
1
2
3
4
cero/
. . mcero.py
+ uno/
. . muno.py
El problema surge cuando "cuno" llama a una función " f01" dentro del paquete muno.py a través de un método de la superclase ccero.fex() que ejecuta un "exec" para ejecutar " f01("cadena..") " que realizar un print, como se puede ver en el código, dando el error:
NameError: name 'f01' is not defined
Entiendo que la función 'f01' al estar en el paquete "muno.py" no es vista por la función de la superclase "ccero.fex()" del paquete mcero.py.
Mi problema consiste en como puedo resolver este problema de visibilidad de una función de la superclase que deba ver una función o clase dentro del paquete de la subclase, ya que estoy desarrollando una aplicación que se repite este problema en los diferentes paquetes, y no me interesa fusionar todo el código en uno solo para solventarlo.
Les dejo el código para que puedan ayudarme a resolverlo.
También es interesante que me puedan decir donde puedo leer algo sobre la integración de paquetes para no repetir este problema o similar.
Gracias.
Módulo mcero.py en paquete "cero"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def f0(var=""):
print " function f0() arg ->",var
"""
def f01(var=""):
print " function f01() arg-> ", var
"""
class ccero(object):
def __init__(self,argv=''):
self.argv = argv
self.name = "cero"
self.expresion= "f0(' class "+ self.name + "')"
def info(self):
print '\n','*'*25
print ' class ccero.info() ->', self.name
print ' expresion class ccero.fex("'+ self.expresion+'")'
self.fex(self.expresion)
def fex(self, expresion):
exec(expresion)
if __name__=='__main__':
f=ccero('teste')
f.info()
Módulo muno.py en paquete "uno"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import sys
sys.path.append('.../prg')
from cero.mcero import *
# function test form inner muno.py called from function cero.fex
def f01(var=""):
print "\n function f01() arg-> ", var
# new subclass "uno" from super "cero"
class cuno(ccero):
def __init__(self, argv=''):
ccero.__init__(self, argv)
self.name = "uno"
def infob(self):
print '** infob() from class uno ***', '\n'
self.expresion= "f0(' from class "+ self.name + "')"
self.info()
self.expresion= "f01(' from class "+ self.name + "')"
print ' calling cuno.fex(' + self.expresion + ')'
self.fex(self.expresion)
if __name__=='__main__':
cu=cuno('teste')
cu.infob()
les dejo el archivo rar con el código.
- cero.rar(2,6 KB)
Valora esta pregunta


0