将一个类的方法作为参数传递给不同类中另一种方法的最佳方法是什么

时间:2019-08-14 23:05:22

标签: python-3.x tail-recursion

我是python的新手,尝试编写逻辑以在失败时重试某些方法。为了确保这一点,我想将需要重试的方法作为参数传递给try_again方法。

我想编写一个重试逻辑,以便当方法失败时,类似于Scala中的尾部递归逻辑,该方法将在无错误的情况下重试任意次,然后再出错。 在我们的场景中不建议使用@retry功能,我们希望使用类似于其他语言的自定义重试逻辑,在该逻辑中我们可以参数化重试次数和重试间隔时间。我尝试了以下代码,并希望了解在try_again方法中传递参数的任何更好/正确的方法。

import logging
import os

log_level = os.environ.get('LOG_LEVEL', 'INFO')
logging.root.setLevel(logging.getLevelName(log_level))
log = logging.getLogger()


class A(object):
    def __init__(self, name):
        self.name = name

    def execute_A_logic(self):
        """
        A logic
        """
        return self.name


class B(object):
    def __init__(self, no_of_retries, interval):
        self.retries = no_of_retries
        self.interval = interval

    def try_again(self, method_to_execute: (), try_count = None):
        try_count = 0 if try_count is None else try_count
        try:
            log.info(try_count)
            method_to_execute()
        except Exception as e:
            log.info(e)
            if try_count < self.retries:
                try_count += 1
                log.info("try count within limit. retry execution")
                self.try_again(method_to_execute, try_count)


class C(object):
    def __init__(self, some_name, some_retries, some_interval):
        self.some_thing = some_name
        self.some_num_retries = some_retries
        self.some_time_interval = some_interval
        self.class_A = A(name=self.some_thing)
        self.class_B = B(no_of_retries=self.some_num_retries, interval=self.some_time_interval)

    def execute_C_logic(self):
        self.class_B.try_again(method_to_execute=self.class_A.execute_A_logic, try_count=0)
        """
        C logic
        """

我想知道我使用try_again的方式是否正确。在这里,我在try_again方法中键入指定的变量。重试的方法没有参数,但是具有该方法的类具有多个变量。 同样,是否将从类C中正确执行方法execute_A_logic。 请纠正我的任何错误,并告诉其他更好的代码编写方法。

0 个答案:

没有答案