У меня есть класс с унылым повторяющимся паттерном по своим функциям и я хотел превратить этот паттерн в декоратор. Но дело в том, что этот декоратор должен обращаться к некоторым атрибутам текущего экземпляра, поэтому я хотел превратить его в метод в этом классе. У меня с этим проблемы.
Итак, это похоже на то, что я хочу:
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
def mydecorator(self, myfunction):
def call(*args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return myfunction(*args, **kwargs)
return call
@mydecorator #Here, comment (1) below.
def somemethod(self, x):
return x + 1
(1 )Вот в чем проблема. Я хочу использовать метод DullRepetitiveClass.mydecorator
, чтобы украсить метод somemethod
. Но я понятия не имею, как использовать метод из текущего экземпляра в качестве декоратора.
Есть ли простой способ сделать это?
РЕДАКТИРОВАТЬ :Хорошо, ответ очевиден. Как говорит Свен, сам декоратор просто трансформирует метод. Сам метод должен иметь дело со всеми вещами, касающимися экземпляра :
def mydecorator(method):
def call(self, *args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return method(self, *args, **kwargs)
return call
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
@mydecorator
def somemethod(self, x):
return x + 1
-. 121 ---999612-
У меня есть база данных с 69 таблицами, и я хочу выбрать только первые три записи каждой таблицы.
Я могу сделать это для таблицы с помощью:
SELECT TOP 3 *
FROM table_schema.table_name
Однако, если бы я должен был сделать это вручную, это заняло бы много времени.
Не могли бы вы предложить обходной путь?
Я пробовал это решение , но я могу заставить его работать (Я не знаю, как модифицировать его для MSSQL)
РЕДАКТИРОВАТЬ Спасибо за ваши ответы. Я, вероятно, был недостаточно ясен :Я имел в виду, что хотел проанализировать каждую отдельную таблицу и получить только 3 верхние записи, а затем перейти к следующей.Код Ярослава ниже - это то, что мне нужно
DECLARE @sql VARCHAR(MAX)='';
SELECT @sql=@sql+'SELECT TOP 3 * FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+']'+';'
FROM sys.tables
EXEC(@sql)