Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SARGE553413 en 27 Febrero 2014, 01:21 am



Título: Duda con decorador y parámetro self en Python
Publicado por: SARGE553413 en 27 Febrero 2014, 01:21 am
Hola a todos.

Estoy intentando decorar el método de una clase. El decorador en cuestión tiene un parámetro.
Dentro de la clase intento decorar la función A() con este decorador (pasándole como parámetro 'self'), pero al llamar al método A() me da error:

" NameError: name 'self' is not defined "

¿Qué hago mal?

Gracias


Título: Re: Duda con decorador y parámetro self en Python
Publicado por: Once en 28 Febrero 2014, 23:48 pm
¿Puedes poner el código?

Saludos!


Título: Re: Duda con decorador y parámetro self en Python
Publicado por: EzianGES en 4 Marzo 2014, 18:55 pm
¿Puedes poner el código?

Saludos!

Quizás porque estás haciendo referencia a un objeto que no está instanciado... i think...

Si subís el código sería de gran de ayuda.


Título: Re: Duda con decorador y parámetro self en Python
Publicado por: SARGE553413 en 9 Marzo 2014, 15:40 pm
Subo el código, está en dos ficheros separados:

Fichero 1 (decoradores):
Código:
'''
Created on 26 Feb 2014

@author: dan
'''

from time import time

#Decora la función para sacar por pantalla el id del
#hilo que se está ejecutando
def printThreadName(_self):
    def _thread_i_am(function):
        def tim(*args,**kwargs):
            r = function(args,kwargs)
            print("I am ",_self.getName()," thread")
            return r
        return tim
    return _thread_i_am

FIchero 2 (clase que usa los decoradores)
Código:
import threading
from Decorators import printThreadName

class FileThread(threading.Thread):
    def __init__(self,_filePath):
        threading.Thread.__init__(self)
        self.larger_line=None;
        self.filePath=_filePath
    
    #Devuelve la línea mas larga de un fichero
    def __largerLine(self):
        ...
        ...
        

    def getLargerLine(self):
        return self.larger_line
    
    @printThreadName(self)
    def run(self):
        self.largerLine();


Saludos y gracias de antemano.