Я создаю небольшой модуль-оболочку для публичной библиотеки, в библиотеке много повторений, где после создания объекта, возможно, методы требуют одинаковых элементов данных.Оформление метода в python
Мне нужно передать те же данные в моем классе-оболочке, но не очень хочется передавать одно и то же снова и снова. Поэтому я хотел бы сохранить данные в моем классе-оболочке и применить его, если он не включен в этот метод. Однако, если что-то пойдет по дороге, я хочу, чтобы аргументы метода перезаписывали стандартные значения по умолчанию. Вот фрагмент кода, который иллюстрирует мои цели.
class Stackoverflow():
def __init__(self,**kwargs):
self.gen_args = {}
#Optionally add the repeated element to the object
if 'index' in kwargs:
self.gen_args['index'] = kwargs['index']
if 'doc_type' in kwargs:
self.gen_args['doc_type'] = kwargs['doc_type']
#This is where the problem is
def gen_args(fn):
def inner(self,*args,**kwargs):
kwargs.update(self.gen_args)
return fn(*args,**kwargs)
return inner
#There is a bunch of these do_stuffs that require index and doc_type
@gen_args
def do_stuff(self,**kwargs):
print(kwargs['index'])
print(kwargs['doc_type'])
#Just send arguments up with the method
print("CASE A")
a = Stackoverflow()
a.do_stuff(index=1,doc_type=2)
#Add them to the class and have all methods use them without having to specify
#them each time
print("CASE B")
b = Stackoverflow(index=1,doc_type=2)
b.do_stuff()
#The arguments specified in the method should overwrite class values
print("CASE C")
c = Stackoverflow(index=1,doc_type=2)
c.do_stuff(index=3,doc_type=4)
EDIT:
Таким образом, вопрос, как я могу исправить gen_args или есть лучший способ сделать это? Специфическая ошибка я получаю с этим кодом: возвращение п (* арг ** kwargs) TypeError: do_stuff() отсутствует 1 необходимые позиционная аргумент: «я»
В чем Ваш вопрос? –
Обновлено сообщение, Надстройка выше явно не работает, поэтому очевидный вопрос заключается в том, как заставить его делать то, что я хочу, чтобы он делал. – browskie
Как это происходит? Выдает ли сообщение об ошибке или приводит к неправильным результатам? Какой результат вы ожидаете, и какой результат вы на самом деле получаете? –