2012-04-04 3 views
1

Предположим, у меня есть классы A1 и A2 и класс B, который имеет элементы типа A1/A2.Может наследуется класс изменить тип элементов в базовом классе

Теперь у меня есть класс B '(B) (он наследуется от B). Может ли этот класс использовать A1 'и A2' вместо A1 и A2, Может ли этот новый класс каким-то образом обменять тип элементов в базовом классе?

Обычно я бы сказал, что это невозможно, но так как это про питона ...: P

+0

«Элементы» означают «атрибуты» здесь или что-то еще? –

+0

То, что вы описываете, похоже на стандартный [полиморфизм] (http://en.wikipedia.org/wiki/Polymorphism_ (computer_science)) и с правильными объявлениями типа (всегда объявляющими супертип в качестве ссылочного типа), было бы вполне возможным в других языки, а также «A1» и «A2» наследуются от «A1» и «A2». – BergmannF

+0

@gnibbler yes it – HWende

ответ

4

Вы имеете в виду, как это?

class A1(object): 
    pass 

class A1Child(A1): 
    pass 

class A2(object): 
    pass 

class A2Child(A2): 
    pass 


class B(object): 

    a1_instance = None 
    a2_instance = None 

    def __init__(self): 
     self.a1_instance = A1() 
     self.a2_instance = A2() 

class BChild(B): 

    def __init__(self): 
     self.a1_instance = A1Child() 
     self.a2_instance = A2Child() 


b_instance = B() 

print b_instance.a1_instance 
print b_instance.a2_instance 


bchild_instance = BChild() 

print bchild_instance.a1_instance 
print bchild_instance.a2_instance 
+0

Отлично! Спасибо за код примера, и я AM впечатлен python. Еще раз. – HWende

Смежные вопросы