gpt4 book ai didi

python - 我可以从父类(super class)中实例化一个子类对象吗

转载 作者:太空狗 更新时间:2023-10-30 02:00:51 25 4
gpt4 key购买 nike

我有以下示例代码:

class A(object):
def __init__(self, id):
self.myid = id
def foo(self, x):
print 'foo', self.myid*x

class B(A):
def __init__(self, id):
self.myid = id
self.mybid = id*2
def bar(self, x):
print 'bar', self.myid, self.mybid, x

使用时,可以生成以下内容:

>>> a = A(2)
>>> a.foo(10)
foo 20
>>>
>>> b = B(3)
>>> b.foo(10)
foo 30
>>> b.bar(12)
bar 3 6 12

现在假设我有更多的子类 class C(A):class D(A):。我也知道 id 总是适合 B、C 或 D,但绝不会同时适合其中 2 个。

现在我想调用 A(23) 并获取正确子类的对象。像这样:

>>> type(A(2))
<class '__main__.B'>
>>> type(A(22))
<class '__main__.D'>
>>> type(A(31))
<class '__main__.C'>
>>> type(A(12))
<class '__main__.B'>

这是不可能的还是有可能只是糟糕的设计?此类问题应该如何解决?

最佳答案

您应该实现 Abstract Factory pattern ,然后您的工厂将根据提供的参数构建您喜欢的任何对象。这样您的代码将保持干净和可扩展。

当您升级您的解释器版本时,您可以用来直接制作它的任何 hack 都可以被删除,因为没有人期望向后兼容性来保留这些东西。

编辑:过了一会儿我不确定你是应该使用抽象工厂,还是 Factory Method pattern .这取决于您的代码的详细信息,因此请满足您的需求。

关于python - 我可以从父类(super class)中实例化一个子类对象吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/527757/

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