Foros del Web » Programando para Internet » Python »

Problema: Metodo y Clases

Estas en el tema de Problema: Metodo y Clases en el foro de Python en Foros del Web. Buenas a todos Tengo un problemilla, resulta que soy nuevo en la POO y hay algo que seguramente debe ser sencillo, ya que se trata ...
  #1 (permalink)  
Antiguo 05/09/2009, 23:07
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años, 9 meses
Puntos: 12
Información Problema: Metodo y Clases

Buenas a todos

Tengo un problemilla, resulta que soy nuevo en la POO y hay algo que seguramente debe ser sencillo, ya que se trata de acceder a funciones externas, estando dentro de una Clase en carpetas distintas...

Tengo un fichero llamado Comandos.py y en el hay metodos sueltos, como por ejemplo:

Código:
def sendNoticable(connection, message):
    newMessage = '%s: %s' % (connection.name, message)
    connection.factory.broadcastMessage(newMessage)
Ese es uno entre otros, y dentro de OTRA carpeta llamada Juego, me encuentro con Server.py y en una parte yo tengo que llamar al metodo mencionado arriba, el 'sendNoticable' y no puedo hacerlo...

Se trata que al morir un jugador, se llama a esa funcion que imprime en pantalla quien fue el que murio. Entonces, el comando esta en esa carpeta, pero haga lo que haga no me deja llamarlo... Probe de estas maneras y perdon mi ignorancia:

Comandos.sendNoticable(connection, 'Mensaje')
Carpeta.Comandos.sendNoticable(connection, 'Mensaje')
Comandos.sendNoticable()

Y otras mas...

Cabe destacara que importe 'en teoria' el fichero Comandos asi:

Código:
import Comandos
Me gustaria sacarme esta duda, y ya que esta, ir aprendiendo un poco mas

Muchas Gracias por el tiempo
__________________
CabaSoft Networks
  #2 (permalink)  
Antiguo 06/09/2009, 01:22
AxL456
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema: Metodo y Clases

hola..

Para que te podamos entender mejor colócanos la estructura de las carpetas y archivos asi podemos visualizar mejor lo que esta sucediendo (colocalo de la siguiente manera):

Carpeta Madre:
  • Carpeta1
    • Archivo1.py
    • archivo2.py
  • Carpeta2
    • archivo3.py
    • archivo4.py

También colócanos el codigo de la clase "padre" (la clase de la cual deseas heredar las funciones) para que podamos echarle un ojo y ayudarte..
  #3 (permalink)  
Antiguo 07/09/2009, 01:38
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años, 9 meses
Puntos: 12
Respuesta: Problema: Metodo y Clases

Holas

Muchas Gracias por responderme

Intente algunas cosas, y algo me salio y otras cosas mas complejas no

Es asi la ubicacion de las carpetas:

Cita:
Juego/Comandos/getcommands.py

Juego/Game/network/Server.py
En el archivo 'getcommands.py' no hay ninguna Clase No se porque, el codigo lo estoy modificando yo, pero ya vino asi...

Tan solo hay unos metodos:

Código python:
Ver original
  1. def Monster():
  2.   Activated = 0
  3.  
  4. def sendNoticable(connection, message):
  5.   newMessage = '%s: %s' % (connection.name, message)
  6.   connection.factory.broadcastMessage(newMessage)

Y yo desde el OTRO archivo, el Server.py quisiera acceder a modificar la variable 'Activated' que esta en el metodo Monster()

Dice algo asi:

Código python:
Ver original
  1. player.health = 100
  2. player.alive = True
  3. player.movement.stop()
  4. ...

Ahi quisiera yo, justo ahi, poder jugar con la propiedad esa 'Activated', ya que me modifica el estado de un MOD dentro del juego. Si esta en 0 el juego es de una forma, y si esta en 1 es de otra...

Una ves que sepa eso, aprovecharia y podria utilizar el otro metodo tambien, el sendNoticable() ... Que calculo que sera lo mismo.

Un saludo
__________________
CabaSoft Networks
  #4 (permalink)  
Antiguo 07/09/2009, 11:49
AxL456
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema: Metodo y Clases

bueno antes que nada por si no lo has realizado, para poder acceder a los archivos en distintas carpetas tienes que colocar un archivo (vació para tu caso) llamado __init__.py en cada carpeta

por lo que la estructura quedaría algo así:
  • carpeta_actual:
    • carpeta1:
      • __init__.py
      • archivo1.py
      • archivo2.py
    • carpeta2:
      • __init__.py
      • archivo3.py
      • archivo4.py

donde la carpeta_actual (no necesita un __init__.py) es la carpeta donde esta tu archivo principal o "main" desde donde estas realizando los import, o es una carpeta anexada al pythonpath.

si no entiendes mucho esto te recomiendo que leas sobre como realizar import a modulos en distintas carpetas, o como funciona el pythonpath (donde python busca a la hora de realizar un import)
http://pyspanishdoc.sourceforge.net/...00000000000000
http://www.google.co.ve/#hl=es&sourc...889a305b5b282a

sobre la parte acceder a las funciones de otros modulos, la manera en que yo lo veo posible, seria algo asi:

archivo getcommands.py
Código python:
Ver original
  1. class dentro_de_getcommands():
  2.     def Monster(self):
  3.         self.Activated = 0
  4.  
  5.     def sendNoticable(self,connection, message):
  6.         self.newMessage = '%s: %s' % (connection.name, message)
  7.         self.connection.factory.broadcastMessage(newMessage)

archivo server.py
Código python:
Ver original
  1. from Comandos.getcommands import dentro_de_getcommands
  2. #asumiendo que la carpeta Juego es la carpeta Main
  3.  
  4. class dentro_de_server(dentro_de_getcommands):
  5.     self.Activated = 0 #aqui modificas a 1 o lo dejas en 0
  6.    
  7. player.health = 100
  8. player.alive = True
  9. player.movement.stop()

de todas maneras tienes que hacer ensayo y error para probar que te funcione adecuadamente, igual te recomiendo leas sobre Programacion Orientada a Objetos para python y entiendas como trabajan las clases y como puedes heredar funciones de otras clases:
http://www.google.com/search?q=pytho...ient=firefox-a
http://blog.rvburke.com/2006/11/22/p...tos-en-python/
http://www.gulic.org/almacen/diveint...ork/index.html
http://mundogeek.net/archivos/2008/0...ion-a-objetos/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:11.