gpt4 book ai didi

python - 如何更好地基于配置文件实例化不同的子类?

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:26 25 4
gpt4 key购买 nike

我有一个基类和多个继承自它的子类。我需要根据提供的配置文件实例化正确的子类。现在,一种方法是使用 if,else 语句并检查配置文件以实例化子类,但这似乎是糟糕的编程代码。此外,如果我稍后添加更多子类,if-else 链会变得很长。有人可以建议更好的方法吗?

我有一个模板代码,而不是配置文件,我使用命令行参数来做同样的事情。

class Shape(object):
pass

class Rectangle(Shape):
pass

class Circle(Shape):
pass

class Polygon(Shape):
pass

import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--shape', help='Provide the shape')

args = parser.parse_args()

if args.shape == 'circle':
shape = Circle()
print(shape.__class__.__name__)
elif args.shape == 'rectangle':
shape = Rectangle()
print(shape.__class__.__name__)
elif args.shape == 'polygon':
shape = Polygon()
print(shape.__class__.__name__)
else:
raise Exception("Shape not defined")

最佳答案

你可以把你所有的类都放在一个像这样的字典对象中

my_shapes = { "rectangle" : Rectangle, "circle": Circle, "polygon": Polygon }
args = parser.parse_args()
if args.shape in my_shapes:
shape = my_shapes[args.shape]() #Here you will do the same thing that the if else
else:
raise Exception("Shape not defined")

关于python - 如何更好地基于配置文件实例化不同的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112147/

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