Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #104103

Re: Can I find the class of a method in a decorator.

From Antoon Pardon <antoon.pardon@rece.vub.ac.be>
Newsgroups comp.lang.python
Subject Re: Can I find the class of a method in a decorator.
Date 2016-03-05 17:21 +0100
Message-ID <mailman.228.1457194876.20602.python-list@python.org> (permalink)
References <56DAF5A7.9080503@rece.vub.ac.be> <CAPTjJmo+Hj6qWMjdbF6T4K6fx49HgkXdBpO0rATV4g3Nkkh1Cg@mail.gmail.com>

Show all headers | View raw


Op 05-03-16 om 16:18 schreef Chris Angelico:
> On Sun, Mar 6, 2016 at 2:05 AM, Antoon Pardon
> <antoon.pardon@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.

Back to comp.lang.python | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Re: Can I find the class of a method in a decorator. Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2016-03-05 17:21 +0100
  Re: Can I find the class of a method in a decorator. Steven D'Aprano <steve@pearwood.info> - 2016-03-06 12:57 +1100

csiph-web