我喜欢覆盖超类的一种方法,并为目标方法提供不同的选项。例如,超类中的函数称为__func__
,我有两个实现__func1
和__func2
的实现__func__
。我想根据用户的输入从构造函数中选择这两个函数中的一个。我尝试了一些我能想到的东西,但没有一个能奏效。这是可能吗?如果是,那么正确的做法是什么?
编辑:我的班级使用__slots__
来定义成员变量,所以我不能使用像self.__func__ = self.__func1
这样的东西
答案 0 :(得分:2)
是的,这是可能的。这是子类中的代码示例。父类中无需更改:
def __init__(self, user_input):
if (condition 1):
self.__func__ = self.func1
else:
self.__func__ = self.func2
def __func1(self, your arguments):
code
def __func2(self, your arguments)
other code
由于我不知道函数或条件的论据,这是我能得到的具体细节。
答案 1 :(得分:1)
我认为您需要将SharedData
的用户输入存储到实例属性中:
__init__
编辑:这是一个不存储用户输入的简单变体。或许有其他更复杂的方法可以做到这一点。但这是最简单的一个:
class Parent(object):
def func(self):
raise NotImplementedError
class Child(Parent):
def __init__(self, user_input):
self.user_input = user_input
def func(self):
if self.user_input == "func1":
self._func1()
elif self.user_input == "func2":
self._func2()
else:
# make sure to guard against other possible inputs!
def _func1(self):
# implementation here
def _func2(self):
# implementation here
答案 2 :(得分:1)
class Subclass(Superclass):
def __init__(self, choice=True, *args, **kwargs)
super().__init__(*args, **kwargs)
self.choice=choice
def __func__(self):
if self.choice:
return self.__func1()
else:
return self.__func2()
def __func1(self):
do something
def __func2(self):
do something