<font color="black"><a href="http://s-c.me/9339/s">Copy Source</a> | <a href="http://s-c.me/9339/h">Copy HTML</a><ol> <li><font color="#008000">'''</font><br/> <font color="#008000">Базовый класс</font><br/> <font color="#008000">'''</font></li> <li><font color="#0000ff">class</font> <font color="#cc6633">Component</font>():</li> <li> </li> <li> connects = []</li> <li> </li> <li> <font color="#008000">'''</font><br/> <font color="#008000"> Метод добавляе объект в коллекцию</font><br/> <font color="#008000"> '''</font></li> <li> <font color="#0000ff">def</font> <font color="#cc6633">connect</font>(self, object):</li> <li> <b>self</b>.connects.append(object)</li> <li> </li> <li> </li> <li><font color="#008000">'''</font><br/> <font color="#008000">Подкласс 1</font><br/> <font color="#008000">'''</font></li> <li><font color="#0000ff">class</font> <font color="#cc6633">Component1</font>(<font color="#cc6633">Component</font>):</li> <li> </li> <li> <font color="#0000ff">def</font> <font color="#cc6633">getData</font>(self):</li> <li> <font color="#0000ff">print</font> <font color="#008000">123</font></li> <li> </li> <li> </li> <li><font color="#008000">'''</font><br/> <font color="#008000">Подкласс 2</font><br/> <font color="#008000">'''</font></li> <li><font color="#0000ff">class</font> <font color="#cc6633">Component2</font>(<font color="#cc6633">Component</font>):</li> <li> </li> <li> <font color="#0000ff">def</font> <font color="#cc6633">getData</font>(self):</li> <li> <font color="#0000ff">print</font> <font color="#008000">123</font></li> <li> </li> <li> </li> <li> </li> <li><font color="#008000">'''</font><br/> <font color="#008000">Инстанцируем</font><br/> <font color="#008000">'''</font></li> <li>c1 = <font color="#cc6633">Component1</font>()</li> <li>c2 = <font color="#cc6633">Component2</font>()</li> <li> </li> <li><font color="#008000">'''</font><br/> <font color="#008000">Проверяем кол-во элементов в подклассе 2</font><br/> <font color="#008000">'''</font></li> <li><font color="#0000ff">print</font> <b>len</b>(<font color="#cc6633">Component2</font>.connects) <font color="#696969"># 0</font></li> <li> </li> <li><font color="#008000">'''</font><br/> <font color="#008000">Добавляем первому подклассу в объект коллекцию</font><br/> <font color="#008000">'''</font></li> <li>c1.<font color="#cc6633">connect</font>(c2)</li> <li> </li> <li><font color="#008000">'''</font><br/> <font color="#008000">Проверяем кол-во элементов в подклассе 2</font><br/> <font color="#008000">'''</font></li> <li><font color="#0000ff">print</font> <b>len</b>(<font color="#cc6633">Component2</font>.connects) <font color="#696969"># 1 </font></li> </ol></font>
class MetaComp(type):
def __init__(cls,name,bases,kwargs):
super(MetaComp, cls).__init__(name,bases,kwargs)
cls.connects = [] # для каждого класса и наследника будеит свой
class Comp(object):
__metaclass__ = MetaComp
@classmethod
def connect(cls,obj):
cls.connects.append(obj)
class Comp1(Comp):
pass
class Comp2(Comp):
pass
# каждый вызов добавляет к своему connects:
Comp.connect('foo')
Comp1.connect('foo1')
Comp2.connect('foo2')