如何根据环境变量设置不同的类方法集?

问题描述 投票:0回答:1

我正在开发一个玩具加密项目,其中涉及训练 keras 模型,然后将它们部署在 AWS lambda 中。我在本地测试模型并将它们部署为 AWS 中的 lambda 函数。有些类在本地和 lambda 调用期间都使用,但它们的内部工作方式截然不同。例如,类

Asset
实现
current_price
方法,但它在一种情况下调用 API,在另一种情况下调用本地数据库。

我想到了用环境变量来区分两个环境。如何根据环境变量使用不同的方法集或不同的方法实现来实例化同一个类?有没有更好的方法来解决这个问题?我正在用Python编写。

python amazon-web-services class aws-lambda environment-variables
1个回答
0
投票

您可以有条件地定义方法...

class MyClass:
    if some_condition:
        def some_method(self):
            ...
    else:
        def another_method(self):
            ...

但这有点尴尬。对于一个类来说,最好始终具有相同的方法,并且它们的行为可以通过参数、组合或其他方式来控制。

class Myclass:
    def __init__(self, execution_mode: Literal['lambda', 'local']):
        assert execution_mode in ('lambda', 'local'), "Invalid execution mode"
        self.execution_mode = execution_mode

    def _some_method_lambda(self):
        ... # implementation when running in lambda

    def _some_method_local(self):
        ... # implementation when running locally

    def some_method(self, *args, **kwargs):
        if self.execution_mode == 'local':
            self._some_method_local(*args, **kwargs)
        elif self.execution_mode == 'lambda':
            self._some_method_lambda(*args, **kwargs)
...

if os.environ.get('EXECUTION_ENVIRONMENT') == 'lambda':
    my_instance = MyClass(execution_mode='lambda')
else:
    my_instance = MyClass(execution_mode='local')

或者类似的东西。有很多方法可以将其切片。

© www.soinside.com 2019 - 2024. All rights reserved.