我有一个Python类,让我们称其为
参考资料,
从技术上讲,这并不难实现,但我想到的所有方法都感觉不完全正确:
MyClass
,其中包含几个绑定方法。我需要其中一种方法的行为,称为.dynamic_method()
,根据在对象创建期间设置的参数值而大不相同。将有几个dynamic_method
的变化,它们之间共享的代码非常少,因此将它们定义为单独的函数/方法而不是作为具有许多选项和条件的单个大型方法是有意义的。我不需要在创建对象后能够更改此方法的行为,所有内容都可以在__init__()
中设置。参考资料,
MyClass
管理数据集,并且.dynamic_method
处理这些数据的某些IO方面,这取决于数据集和上下文。从技术上讲,这并不难实现,但我想到的所有方法都感觉不完全正确:
- 将方法变化单独定义为函数,并在
__init__()
期间使用此线程中描述的方法之一将其附加为绑定方法:Adding a Method to an Existing Object Instance。对我来说,这似乎是最自然的选择,但是该线程中的许多答案强烈反对使用此模式。 - 在类定义中定义所有可能的方法,如
.dynamic_method_a
,.dynamic_method_b
等,并设置选项/别名,以便MyClass.dynamic_method()
调用正确的方法。这将导致非常长的类定义,以及每个对象的大量未使用的方法。 - 将方法存储为单独的函数,并使
.dynamic_method()
仅使用self
作为第一个参数调用正确的函数。这感觉像是故意滥用方法的概念,并会破坏linting。 - 使用工厂模式或对象生成器函数。我宁愿避免这种情况,因为它将向代码库添加最复杂性。
my_object = MyClass(method_variation='b')
应该返回一个对象,其中my_class.dynamic_method()
引用方法的变体b
(显然,所有这些名称都是占位符)。 - jelcOfDice