首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于用户输入实例化不同的类

问基于用户输入实例化不同的类
EN

Stack Overflow用户
提问于 2018-09-11 18:25:22
回答 1查看 1.3K关注 0票数 2

我正在尝试编写一个可扩展的python代码来实现几种不同的优化算法。我在面向对象编程方面不是很有经验,所以我的问题措辞可能不正确,但我认为我正在努力在代码中设置继承和/或多态性。

我希望能够根据用户输入在几种不同的优化模式之间进行选择。我的第一个倾向是编写一个Optimizer类,它将保存所有的公共信息,然后为继承Optimizer类的每个算法都有特定的类。即。

代码语言:javascript
复制
class Optimizer:
    def __init__(self, user_input):
        pass

class Method1(Optimizer):
    def__init__(self, user_input):
        pass
    def run()
        pass

class Method2(Optimizer):
    def__init__(self, user_input):
        pass
    def run()
        pass

我很快意识到,在初始化优化器之前,您需要知道要使用哪种方法。这并不是世界末日,但在优化器对象的初始化中解析用户输入似乎更清晰。我希望能够使用以下内容初始化优化器:

代码语言:javascript
复制
optimizer = Optimizer(user_input)

由于得到的优化器基于嵌入在user_input文件中的“方法”字段具有正确的行为。

这样做的最佳方法是什么,这样我就不必在添加新方法时重新编写一堆开关语句了?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 18:33:41

我的文章正好解决了这个问题。

简而言之,您最好预先声明用户输入如何映射到类中。为此,您可以使用:

  • 显式映射
  • 动态类名生成
  • 注册表和类装饰器
  • 自定义元类
  • Init子类钩子

有关更多细节,请阅读我前面提到的文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52282069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档