【问题标题】:Get the right Python object according to a setting or user input [duplicate]根据设置或用户输入获取正确的 Python 对象 [重复]
【发布时间】:2016-09-29 08:30:23
【问题描述】:

我在一个模块 shape.py 中有两个继承的类:

class Shape(object):

class Triangle(Shape):

class Square(Shape):

在我的主代码中,我想实例化一个Shape,但我不知道它会是什么样的形状。形状取决于用户输入或设置。

根据 Python 中的设置或用户输入获取正确实例的最佳方法是什么?

【问题讨论】:

    标签: python inheritance factory instantiation


    【解决方案1】:

    您可以创建一个字典,将预期的输入作为键,将类作为值(注意没有()):

    class_dict = {'triangle': Triangle, 'square': Square}
    
    user_input = input()
    
    shape_object = class_dict[user_input]()
    

    如果用户输入triangleshape_object 将是一个Triangle 实例,如果用户输入square,那么shape_object 将是一个Square 实例。

    请注意,这是一个基本示例,如果用户既没有输入'triangle' 也没有输入'square',则会引发KeyError

    【讨论】:

    • 谢谢。我在这里找到了一个设计github.com/evandempsey/python-design-patterns/blob/master/…。他们使用ShapeFactory 。我现在真的不知道什么是最好的选择......
    • 这几乎是一样的,他们只是将我示例中的字典替换为带有if 语句的类。我个人更喜欢字典。更短更干净。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    相关资源
    最近更新 更多