我有以下示例代码:
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
Run Code Online (Sandbox Code Playgroud)
使用时,可以生成以下内容:
>>> a = A(2)
>>> a.foo(10)
foo 20
>>>
>>> b = B(3)
>>> b.foo(10)
foo 30
>>> b.bar(12)
bar 3 6 12
Run Code Online (Sandbox Code Playgroud)
现在让我说我有更多的子类class C(A):
和class D(A):
.我也知道id总是适合B,C或D,但同时也不会在2中.
现在我想调用A(23)并获得正确子类的对象.像这样的东西:
Run Code Online (Sandbox Code Playgroud)>>> type(A(2)) <class '__main__.B'> >>> type(A(22)) <class '__main__.D'> >>> type(A(31)) <class '__main__.C'> >>> type(A(12)) <class '__main__.B'>
这是不可能的,还是可能,但只是糟糕的设计?如何解决这样的问题?