如何解决动态更改基类 Python?
假设我有 4 个类 class ModelA
、class ModelB
、class ModelC
class ModelD
。
我还有一个class LongModel
。我想从以上 4 个类中选择作为 class LongModel
的 BaseClass,基于 model_name
。什么是正确的做法。截至目前,我正在执行以下操作:
def get_long_model(model_name):
if model_name == 'A':
base_class = Model_A
if model_name == 'B':
base_class = Model_B
if model_name == 'C':
base_class = Model_C
if model_name == 'D':
base_class = Model_D
return LongModel(base_class)
我真的不想使用函数。我们可以通过 LongModel
本身做到这一点吗?
例如:
class LongModel():
def __init__(self,model_name):
if model_name == 'A':
# Assign base class for LongModel
或者使用类或任何东西的一些巧妙方法。
如果我使用合成,
class LongModel():
def __init__(self,model):
self.model = model
long_model = LongModel(ModelA)
然后,假设 ModelA 有一些属性,我想在 LongModel
中使用这些属性,说出名称,我必须添加 self.name = model.name
,对于一两个属性来说没问题。但是对于所有/大多数属性来说,这不难吗?
解决方法
您所描述的(使用函数选择类)类似于使用工厂,但缺点是每次运行时都要重新创建类。这会干扰类型检查/比较。通常,您应该只创建每个类对象一次。
如果您想从 LongModel
类内部控制此行为,您可以通过覆盖其 __new__
方法来实现,如下所述:https://stackoverflow.com/a/10357472/5946921
不过,我不建议您这样做,因为这很可能是糟糕的设计。您绝对应该预先生成所有类,然后重新使用这些类对象,以防止以后出现类型检查/比较问题。此外,请考虑为此使用组合而不是继承。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。