Osobně bych se protected metodám či atributům obecně nebránil, ale podle mé zkušenosti se to bez nich dá vklidu přežít. Ještě víc by se mi asi líbila možnost libovolný objekt "zmrazit", jako to umí Ruby. Ale tyhle vlastnosti se dají přidat v podstatě kdykoliv.
Vy sam bez nich prezijete (i kdyz i autorovi to pomaha, kdyz si to dobre navrhne a nalajnuje), ale pri publikaci knihoven pro dalsi vyvojare je to dobra vec. Stejne jako interfaces a abstraktni tridy.
Podivejte se treba jak princip interfaces pomaha u J2EE a dalsich specifikaci -- servlet kontejnery implementuji J2EE a pritom zachovavaji rozhrani, protoze z principu fungovani jazyka proste musi :)
Pak mate mnohem vetsi jistotu, ze vam jedna aplikace pojede "vsude" (vsichni vime, ze na 100 % to tak nikdy neni).
Python interfaces nepotřebuje, protože má násobnou dědičnost a interface není nic jiného, než nedokonalá náhražka násobné dědičnosti. Abstraktní třída určitě opodstatnění má, ale dá se bez ní také přežít - abstraktní metoda se v Pythonu emuluje pomocí výjimky NotImplementedError a pokud máme následující kód
class A(object):
....def a(self):
........raise NotImplementedError
class B(A):
....pass
Nástroj pylint pak mimo jiné hlásí:
W: 5:B: Method 'a' is abstract in class 'A' but is not overridden
Je jasné, že v Javě je ta kontrola striktnější a použití nástroje typu pylint vyžaduje programátorskou disciplínu. Nicméně analýza kódu při sestavování, jak vidět, možná je a dosáhnout kontroly dodržování rozhraní je možné také. Ještě lepší by ta situace měla být v novém Pythonu po zavedení anotací - ty umožní důkladnější kontrolu než jaká je možná doposud.
Co se týče těch protected atributů, v Pythonu se často používá následující konvence:
name - public
_name - "protected" (== nech mě na pokoji, pokud je to jenom trochu možné)
__name - private
Jinými slovy, pokud člověk vidí identifikátor _name, zpozorní a ví, že na něj nemá šahat, pokud neví přesně, co dělá. Což je dostatečná pomůcka pro autora a vzhledem k filosofii Pythonu (we are all adults) i pro uživatele knihovny. Ten problém je spíš filosofický než technický. Statická analýza kódu při sestavování může pokusy o přístup k "protected" atributu velice snadno odhalit.