Duda con decorador y parámetro self en Python

Iniciado por SARGE553413, 27 Febrero 2014, 01:21 AM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

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

Once


EzianGES

Cita de: 11Sep en 28 Febrero 2014, 23:48 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.

SARGE553413

#3
Subo el código, está en dos ficheros separados:

Fichero 1 (decoradores):

'''
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)

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.