Я следую ниже соглашениям, чтобы украсить определенные методы в классе Python. Мне интересно, есть ли другие способы сделать то же самое. Мой подход, конечно, выглядит не очень хорошо; вызов исходной функции-члена не выглядит интуитивно понятным вообще.Каков наилучший способ оформления методов класса Python?
from threading import Lock
def decobj(fun):
def fun2(*args, **kwards):
with args[0].lock:
print 'Got the lock'
fun(*args, **kwards)
return fun2
class A:
def __init__(self, a):
self.lock = Lock()
self.x = a
pass
@decobj
def fun(self, x, y):
print self.x, x, y
a = A(100)
a.fun(1,2)
* Почему вы считаете, что ваш подход выглядит не очень хорошо? Если вы только когда-либо украшаете методы, почему бы просто не добавить 'self' к сигнатуре обертки? –
@MartijnPieters вызов исходной функции-члена не выглядит интуитивно понятным вообще. Итак, я думаю, что будет лучший способ. –
Это выглядит отлично, если вам нравится унарные операторы '*' и '**' Python. Некоторые конструкции просто выглядят странно, пока вы их не используете несколько раз – z0r