根据初始化参数改变实例化的类

2024-05-03 04:47:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,根据参数将什么类实例化为初始化函数的最佳方法是什么?例如,对于四叉树,如果元素数低于某个阈值,则希望返回叶而不是分支。另一个例子是一个图形,它可以由邻接矩阵支持,也可以由列表支持,这取决于初始化它所用的数据。你知道吗

我能想到的最明显的方法是使用一个工厂函数来确定应该初始化所讨论的类的哪个子类。有没有更好的,更像Python的 怎么办?你知道吗

在这个问题的一个特别棘手的例子中,我有一个可以由任何序列或dict类型支持的数据结构。所使用的backing/子类取决于所提供的数据的类型。在静态类型语言中,我可以简单地使用函数重载,但在Python中,我要么显式地调用isinstance,要么使用一堆“try…catch AttributeError”,这两种方法看起来都是非常糟糕的做法。使用上面的工厂函数解决方案,我看不出一个干净的方法来实现它。(我意识到这是一个不同的问题,但这是一个让我想弄清楚的大案子。)


Tags: 数据实例方法函数图形元素类型列表
3条回答

您可以使用__new__,但是工厂函数是一种很好的python方法。你知道吗

看看__new__Documentation

<>在Hy^ Advanced C++ Programming Styles and Idioms书中,James Coplien讨论了如何在C++中模拟^ a2}(pdf version)。它们必须被模拟,因为语言本身不支持它们。这是调用基类构造函数的结果,它会根据所传递的参数导致返回一个子类对象的指针(当然,这只发生在使用C++的<强>新< /Sturix>运算符)动态分配和创建对象时。你知道吗

我发现可以实现Python中提出的许多概念,特别是因为不像C++,类是Python中的第一类对象,它有元类。你知道吗

基本上,基类构造函数变成了一个工厂函数,就像在任何工厂函数中一样,要使它们具有可扩展性需要付出额外的努力……从这个意义上说,它们不必知道以后可能派生的每个可能的子类。虽然这种方法存在一些局限性,但许多有用的应用程序是可能的(你的应用程序听起来可能就是其中之一)。你知道吗

相关问题 更多 >