Я следующий пример кода:Могу ли я создать экземпляр объекта подкласса от суперкласса
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):
. Я также знаю, что идентификатор всегда будет соответствовать либо 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