我想基于字段的值创建类的对象。

例如:

if r_type == 'abc':
                return Abc()
            elif r_type == 'def':
                return Def()
            elif r_type == 'ghi':
                return Ghi()
            elif r_type == 'jkl':
                return Jkl()

如果在这里没有其他的话,什么是pythonic的方法可以避免。我当时正在考虑创建一个字典,其中r_type为键,classname为值,并获取值并实例化,这是一种正确的方法,还是python中有一种更好的惯用方式?

最佳答案

您可以利用以下事实:类是python中的first class objects,并使用字典来访问要创建的类:

classes = {'abc': Abc,    # note: you store the object here
           'def': Def,    #       do not add the calling parenthesis
           'ghi': Ghi,
           'jkl': Jkl}

然后像这样创建类:
new_class = classes[r_type]()  # note: add parenthesis to call the object retreived

如果您的类需要参数,则可以像在普通的类创建中一样放置它们:
new_class = classes[r_type](*args, *kwargs)

关于python - 避免在其他情况下实例化类-python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51627294/

10-10 09:05