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

Reply via email to