gpt4 book ai didi

python - OOP:在初始化类时使用条件语句

转载 作者:行者123 更新时间:2023-12-01 09:22:22 25 4
gpt4 key购买 nike

这个问题针对 OOP 最佳实践。

背景:

我创建了一组脚本,这些脚本要么由 cronjobs 自动触发,要么在后台不断运行以实时收集数据。过去,我使用 Python 的 smtplib 在发生错误或作业成功完成时向自己发送通知。最近,我将这些程序迁移到 Google Cloud 平台,该平台默认情况下会阻止流行的 SMTP 端口。为了解决这个问题,我使用 Linux 的邮件命令继续向自己发送报告。

最初,我的黑客解决方案是使用两个单独的模块来发送警报,这些模块是根据我传递给主脚本的参数启动的。

例如:

$ python mycode.py my_arg

if sys.argv[1] == 'my_arg':
mailer = Class1()
else:
mailer = Class2()

我想对此进行改进并创建一个无需添加代码即可自动处理此问题的模块。我的问题是在初始化类来处理这种情况时包含条件语句是否“正确”。

例如:

Class Alert(object):
def __init__(self, sys.platform, other_args):

# Google Cloud Platform
if sys.platform == "linux":
#instantiate Class1 variables and methods

#local copy
else:
#instantiate Class2 variables and methods

我的直觉告诉我这是错误的,但我不确定正确的方法是什么。

我最感兴趣的是有关如何创建处理环境依赖性以提供相同服务的 OO 类/模块的答案。就我而言,被阻止的端口需要完全不同的代码集。

编辑:经过一些建议,这里是我最喜欢的关于这个主题的读物。

http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html

最佳答案

这对于 factory class 来说似乎是一个很棒的用例。 ,它封装了条件,并且总是返回 N 个类之一的实例,所有这些类都实现相同的接口(interface),以便代码的其余部分可以使用它,而无需关心所使用的具体类。

关于python - OOP:在初始化类时使用条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50709123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com