Це може дозволити повторне використання коду ще краще за звичайне OOP з наслідуванням.
Що найважливіше знати про Python? Те що код в блоці class – це такий самий код як і в модулі, просто виконується в просторі імен модуля. І функції там звичайнісінькі.
А щоб перенести something з простору імен класу в простір імен модуля, досить написати в класі просто something = something. Ось так:
def say(self, what):
print self.name, 'says', what
class Human(object):
def __init__(self, name):
self.name = name
print __init__ # <function __init__ at 0x7fdc3ba25758>
say = say # here we move say into class namespace
print say # <function say at 0x7fdc3bb1e1b8>
me = Human('Bunyk')
print me.say # <bound method Human.say of <__main__.Human object at 0x7fdc3ba2a310>>
me.say('hello') # Bunyk says hello
Ще ми бачимо що метод стає прив’язаним до об’єкта, власне коли цей об’єкт створюється класом. А в класі це не метод, це просто функція собі.
Правда я подумав що вираз something = something може спантеличити математиків і вони надовго задумаються над його значенням, і написав міксін, бо паттерни всі знають і люблять. :)
Filed under: Кодерство, Конспекти Tagged: Python