我有以下示例代碼:可以實例化一個子類對象從超
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,但從來不會同時在其中兩個。
現在我想調用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'>
這是不可能的或者是可能的,但只是糟糕的設計?這樣的問題應該如何解決?
我不知道爲什麼LetterFactory必須是一個類。將其定義爲`letter_factory`函數會使事情變得更容易(例如,不需要`LetterFactory.getLetterObject`調用,只需調用`letter_factory`) – tzot 2009-10-27 10:04:55