2013-09-05 2 views
0

Это может быть очень простой вопрос ООП:Построение миксинов

У меня есть 2 класса, которые не находятся в одной иерархии. Но оба класса имеют некоторые методы, которые идентичны в коде. Эти методы реализуют «пользовательский интерфейс» своих классов. Я планирую переместить эти методы в mixin, и оба класса наследуют этот mixin.

Проблема: эти методы в настоящее время необходимо обратиться к атрибутам их классов (потому что они в основном UI-х класса): например, они оба относятся к self.MyVar(), который определен по-разному в классе А и класса В.

Как я могу построить мой миксин в этом случае?

+0

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

ответ

1

Миксины можно назвать self.MyVar(), даже если не реализует его, реализация наследования объекта будет использоваться (первой):

class Mixin(object): 
    def talk(self): 
     print self.get_message() 

class Inheritor(Mixin): 
    def get_message(self): 
     return "I'm inheriting" 

i = Inheritor() 
i.talk() 
# prints "I'm inheriting" 

Это будет работать, даже если Mixin реализован get_message, кстати.

Каждый раз, когда вы делаете self.something(), Python будет искать something в порядке, определенном в классе Метод Разрешение заказа ":

print Inheritor.__mro__ 
(<class '__main__.Inheritor'>, <class '__main__.Mixin'>, <type 'object'>) 
+0

А это полезно. Это что-то уникальное для Python или просто общая концепция ООП? – user1008636

+0

@ user1008636 Действительно зависит от языка. AFAIK, который, например, не работал бы в Go. –

+0

Python, немного необычный в этих классах, может вызывать методы, не определенные нигде в своих собственных иерархиях наследования, но любой язык с возможностями отражения может сделать это в некоторой степени (а некоторые без отражения могут просто эмулировать его, например, с помощью соответствующего интерфейса). – nneonneo

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