【发布时间】:2022-01-03 01:06:41
【问题描述】:
TL;DR:我想在抽象类中运行一些逻辑(例如更新数据库)。也许还有另一种方法可以做到这一点,这就是我目前所能想到的(使用装饰器)
###################################
我有以下抽象类:
class MyAbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def my_abstract_method(self, request):
pass
@staticmethod
def decorator_func(self, func):
def run_func(param_one, param_two):
print('INSIDE run_func', param_one, param_two)
results = self.update_database(param_one, param_two)
func(test_id, request)
print('FINISHED run_func')
return run_func
def update_database(self, param_one, param_two):
results = <DO SOME BACKEND CALCULATIONS>
return results
我想创建一个继承自该类的子类,并使用decorator_func 在抽象方法my_abstract_method 中进行一些数据库更新:
class ChildClass(MyAbstractClass):
def __init__(self):
super().__init__()
@MyAbstractClass.decorator_func
def my_abstract_method(self, request):
get_data()
所以我知道my_abstract_method 将获得更新的数据,因为装饰器之前确保运行update_database。
我尝试了很多组合(例如,删除 @staticmethod 或尝试使用 @classmethod 应用它)但它不起作用。对于当前代码,我收到错误:run_func() takes 2 positional arguments but 3 were given
关于如何在my_abstract_method 运行之前轻松运行update_database 有什么想法吗?
【问题讨论】:
标签: python decorator abstract abstract-methods