Метакласстар жана ABC
Класстардын өздөрү кантип курулуп, кантип иштээрин башкаруу
__init_subclass__; кол менен жазылган метакласс — сейрек жана ойлонуп колдонулуучу оор артиллерия.
- инстанс -> класс -> метакласс чынжырын жана эмне үчүн
typeчокуда турарын түшүндүрүү, type(name, bases, namespace)аркылуу классты динамикалуу түзүү,- метаклассыз субкласс түзүүнү кармоо үчүн
__init_subclass__колдонуу, abc.ABCжана@abstractmethodаркылуу интерфейсти аныктоо жана камсыздоо,- өзүнчө метакласс жазуу жана эң негизгиси, ал качан чындап актаарын баалоо.
1. Класс да объект
Python'догу ар бир маани өз тиби бар объект экенин сиз билесиз: type(3) — int, type("hi") — str. Көпчүлүк иштеп чыгуучулар өткөрүп жиберген кадам — бул класстардын өздөрүнө да тиешелүү. Класс — аткаруу учурундагы объект, жана анын тиби метакласс деп аталат. Демейки боюнча бул метакласс — курулган type.
class Dog:
pass
fido = Dog()
print(type(fido)) # <class '__main__.Dog'>
print(type(Dog)) # <class 'type'>
print(type(type)) # <class 'type'> -- type -- өзүнө өзү тип
Ошентип чынжыр бар: инстанс — класстын инстансы, ал эми класс — метакласстын инстансы. Dog өзү объект болгондуктан, аны өзгөрмөгө ыйгарууга, тизмеге коюуга, ага атрибуттарды кошууга жана — негизги түшүнүк — аны class ачкыч сөзү менен эмес, программалык жол менен курууга болот.