Я хотел бы написать декоратор для метода класса python, который может определить, был ли метод вызван из контекста public или частного. Например, если следующий кодОпределение области/контекста вызова метода в python
def public_check_decorator(f):
def wrapper(self):
if self.f is `called publicly`: # <-- how do I make this line work correctly?
print 'called publicly'
else:
print 'called privately'
return f(self)
return wrapper
class C(object):
@public_check_decorator
def public_method(self):
pass
def calls_public_method(self):
self.public_method()
исполнение во время выполнения, в идеале выглядеть примерно так:
>>> c = C()
>>> c.public_method()
called publicly
>>> c.calls_public_method()
called privately
Есть ли способ сделать это в Python? То есть, измените линию
if self.f is `called publicly`: # <-- how do I make this line work correctly?
, чтобы дать желаемый результат?
Просто из любопытства, зачем вам это нужно? – Blender
как вам * определить * публичный? это вызов, вызываемый вне любой функции? называется глобальной функцией? что-то другое? Есть ли определенный стек, который вы определяете как публичную запись в функцию? – mhlester
'c.public_method' такой же, как' self.public_method' в 'calls_public_method'. Итак, что именно вы пытаетесь проверить? – thefourtheye