Python OOP:初始化类时使用条件语句

Python OOP:初始化类时使用条件语句,python,class,oop,initialization,conditional,Python,Class,Oop,Initialization,Conditional,这个问题面向面向对象的最佳实践 背景: 我创建了一组脚本,这些脚本要么由cronjobs自动触发,要么在后台持续运行以实时收集数据。在过去,我使用Python的smtplib在发生错误或作业成功完成时向自己发送通知。最近,我将这些程序迁移到谷歌云平台,默认情况下,该平台会阻止流行的SMTP端口。为了解决这个问题,我使用linux的mail命令继续向自己发送报告 最初,我的黑客解决方案是有两个单独的模块用于发送警报,它们是根据我传递给主脚本的参数启动的 例: 我想在此基础上进行改进,并创建一个模块

这个问题面向面向对象的最佳实践

背景:

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

最初,我的黑客解决方案是有两个单独的模块用于发送警报,它们是根据我传递给主脚本的参数启动的

例:

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

例:

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

我最感兴趣的是关于如何创建OO类/模块来处理环境依赖关系以提供相同服务的答案。在我的例子中,阻塞的端口需要一组完全不同的代码

编辑:在一些建议之后,这里是我最喜欢的关于这个主题的阅读材料


这是一种方法。但我更愿意使用创建动态类实例之类的方法。要做到这一点,您可以只有一个类,而不是从两个不同的类中进行选择。然后,该类将接受一些参数并根据提供的参数返回结果。这里有很多例子,我相信您可以在您的用例中使用它们。尝试搜索如何在python中创建动态类。

这似乎是a的一个很好的用例,它封装了条件类,并且总是返回N个类中的一个实例,所有这些类都实现了相同的接口,因此您的其余代码可以使用它,而不必关心所使用的具体类。

谢谢!我会调查的。是的,这是一个想法,不是调用其他类,而是包含它们的代码。我只是不知道它叫什么。看看这个答案,了解更多信息。为什么不做一个函数,返回一个类或另一个类的实例呢?
$ 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