Je le code exemple suivant:Puis-je instancier un objet sous-classe de la superclasse
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
Lorsqu'ils sont utilisés, les éléments suivants pourraient être générés:
>>> a = A(2)
>>> a.foo(10)
foo 20
>>>
>>> b = B(3)
>>> b.foo(10)
foo 30
>>> b.bar(12)
bar 3 6 12
Maintenant, supposons que j'ai d'autres sous-classes class C(A):
et class D(A):
. Je sais aussi que l'identifiant va toujours dans B, C ou D, mais jamais dans deux d'entre eux en même temps.
Maintenant, je voudrais appeler A (23) et obtenir un objet de la sous-classe correcte. Quelque chose comme ceci:
>>> type(A(2)) <class '__main__.B'> >>> type(A(22)) <class '__main__.D'> >>> type(A(31)) <class '__main__.C'> >>> type(A(12)) <class '__main__.B'>
Est-ce impossible ou est-il possible mais juste une mauvaise conception? Comment de tels problèmes devraient-ils être résolus?
Je ne sais pas pourquoi LetterFactory doit être une classe. Le définir comme une fonction 'letter_factory' rendrait les choses plus faciles (par exemple pas besoin d'appels' LetterFactory.getLetterObject', juste des appels 'letter_factory') – tzot