Op 05-03-16 om 16:18 schreef Chris Angelico: > On Sun, Mar 6, 2016 at 2:05 AM, Antoon Pardon > <antoon.par...@rece.vub.ac.be> wrote: >> Using python 3.4/3.5 >> >> Suppose I have the following class: >> >> class Tryout: >> >> @extern >> def method(self, ...) >> >> Now how can I have access to the Tryout class in >> the extern function when it is called with method >> as argument >> >> def extern(f): >> the_class = ???? >> >> f.__class doesn't work, if I write the following >> >> def extern(f) >> print(f.__class__) >> >> the result is: <class 'function'>, so that doesn't work. >> Looking around I didn't find an other obvious candidate >> to try. Anybody an idea? > > At the time when the function decorator is run, there isn't any class. > You could just as effectively create your function outside the class > and then inject it (Tryout.method = method). > > What is it you're trying to do? Would it be a problem to have a class > decorator instead/as well? > > ChrisA >
The idea is that some of these methods will be externally available and others are not. So that I get an external string and can do something of the following: tryout = Tryout() st = read_next_cmd() if st in tryout.allowed: getattr(tryout, st)() else: raise ValueError("%s: unallowed cmd string" % st) And the way I wanted to populate Tryout.allowed as a class attribute would have been with the decorator extern, which would just have put the name of the method in the Tryout.allowed set and then return the function. -- https://mail.python.org/mailman/listinfo/python-list