Python není jazyk pro OOP dogmatiky, protože preferuje praktičnost před principama OOP. Takže třeba nerespektuje zapozdření (což zjednodušuje jazyk, debugování i práci např. s callbackama).
Python neporušuje zapouzdření. To dělají jen nezodpovědní programátoři.
pokud můžete metodě explicitně předat parametr self, tak nemáte zapouzdření. proto se taky v objektových jazycích, co chtějí zapouzdření udržet, vymýšlí všemožné způsoby, jak se tomu vyhnout. to je jediný smysl existence napr. delegates v .netu.
WTF? to si vzal kde? Self, this nebo cokoliv jineho je vetsinou jen reference(ukazatel) na danou tridu. To se zapouzdrenim nema v podstate nic spolecneho. Jinak nevidim duvod proc by jedinym smysl delegates melo byt poruseni zapouzdreni.
Smyslem existence delegates je právě vyhnout se porušení zapouzdření. Což je stav, který by vznikl, kdyby byla ta metoda vidět jako funkce s explicitně přístupným self.
Dejme tomu, že je self pointer (což v cpythonu skutečně platí). Nicméně python jako jazyk nepředává parametry odkazem, alébrž objektem (viz CLOS, z kterého to python zdědil), takže se o pointerech nemluví.
Problémy s explicitním předáváním okolo zapouzdření jsou dva:
1) V typickém objektovém jazyku máte private atributy, co nesmí být přístupné zvenku. Pokud povolíte explicitní self/this pointery/objekty a chcete to reálně používat, musíte zvenku povolit přístup k vnitřku odkazovaného objektu zvenku, včetně private atributů, což je porušení zapouzdření.
2) V pythonu konkrétně se private atributy specifikujou dohodou mezi programátorama tak, že co začíná jedním podtržítkem, je private atribut. Ale jsou přístupné, jazyk nebrání přístupu k nim a to je porušení zapouzdření. Samozřejmě normálně bude programátor tu konvenci respektovat, takže nepůjde proti zapouzdření, takže v praktické rovině tohle nebude normálně problém. Problém to je akorát v rámci teorie a OOP dogmat.
3) Self/this nebo jak si ten pointer pojmenujete je v typickém objektovém jazyce implementačně závislej pointer, co je generovanej kompilátorem (a může jich být pro jeden objekt více různých, aby fungovaly přístupy k atributům zděděným z různých tříd). A aby kompilátor mohl vygenerovat správný this pointer, staví se na vlastnostech zapouzdření. Kompilátor potřebuje mít tohle pod kontrolou a nedovolit programátorovi, aby si tam předával, co chce. Python je jeden z mála jazyků, co má věci jinak, v pythonu se funkci předává přímo objekt (resp. vnitřně pointer na datovou strukturu, reprezentující objekt) a funkčnost přístupu k atributům objektu řeší místo kompilátoru objekt samotnej.