2014-11-13 2 views
1

Предположим, у меня есть объект python A, то есть экземпляр класса A. Каждый экземпляр класса A имеет атрибут SubType.Импорт методов из класса Python в другой экземпляр класса

У меня также есть классы SubType_B, SubType_C и SubType_D, каждый из которых имеет метод, называемый ingest(). Метод ingest() ранее использовал (self), чтобы получить все необходимые ему параметры, но self теперь является экземпляром класса A.

Самый элегантный способ наследовать/использовать метод ingest() от SubType класса (например, SubType_A), используя self от объекта A?

Ранее метод ingest() был определен в классе A, но я хотел бы разбить его на отдельные классы. Класс A создается, и на основе параметра SubType этот объект наследует правильный метод ingest() из соответствующего класса SubType.

В реальных простых выражениях я хотел бы, чтобы один объект захватил метод из другого объекта, как если бы он был его собственным.

+2

[Если у вас есть экземпляр 'A', то каким образом метод ребенка будет иметь к нему отношение?] (Http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+2

Правильно определите отношения - создайте новый контрольный класс, который передает экземпляр 'A' по мере необходимости в экземпляр' SubType' и удаляет атрибут 'SubType' из' A'. То есть новый класс будет иметь экземпляр 'A' и экземпляр' SubType', который имеет дело с тем, что нужно. –

+0

@HenryGomersall, контрольный класс - хорошая мысль, спасибо, рассмотрим это. – ghukill

ответ

0

UPDATE Окончательное решение было сделать фабричную функцию, которая возвращает экземпляры SubType классов. Эта фабрика считывает информацию в переданных ей параметрах, которые определяют, какой класс SubType для создания экземпляра. Все классы SubType все расширяются Class A.

Я предвидел вещи назад, думая, что я начал с самого общего класса, а затем включил атрибуты и методы из подклассов. Эта фабрично-подобная функция выполняет сбор необходимой информации, а затем создает соответствующий подкласс.

Благодаря @HenryGomersall и @ IgnacioVazquez-Abrams за идеи и разъяснения.

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