Hlopy python bez typove kontroly.
Pripada mi, ze neco zatracujes predtim, nez to poznas a pochopis.
To je velice dobre mozne. Taky castecne proto jsem napsal tento zoufaly vykrik
do tmy. Hlavne jsem si potreboval ulevit, ale v hloubi duse jsem dofal, ze mi
nekdo prozradi jako to dela on. Bohumzel, zatim jsem k presvedceni nedosel.
Po svem propadnuti Pythonu jsem si velmi rychle osvojil styly zvane
duck-typing a EAFP (http://docs.python.org/tut/node18.html#l2h-46 oboji
pod sebou).
To pred kazdym zavolanim metody, nebo pristupu k promene objektu se poptas
toho objektu jestli takovou metodu ma? Jestli chapu EAFP, tak tvrdi ze nez se
zeptat programatora na povoleni, je lepsi prosit uzivatele o odpusteni,
zajimave.
V idealnim pythonskem programu te typ promenne nezajima.
V kazde metode, do
ktere pomoci promenne prijimas nejaky objekt te obvykle zajima existence
podmnoziny jeho vlastnosti. K tem primo pristoupis a pokud je objekt v
runtimu
nema, vyvolana vyjimka se vys pouzije k informovani obsluhy nebo je
odchycena
a vyuzita pozitivne.
Chtel bych vydet jak se snazis v idealnim pythonovskem programu nalez chybu
kdyz se snazis pochopit radek typu:
class C:
...
...
self.html.body.first.content = 'nazdar'
Takze nejdrive se podivas, co asi tak muze byt self.html, v __init__ se proste
nedozvis zadny hint, jakym type by mohl 'html' byt. Zacnes hledat tedy kde se
vola C(), najdes promptne deset mist, ale proste zjistis, ze html je
zase html. Vyberes tedy nejakou konkretni misto a podivas se kde se
vola tohle. Konecne zjistis, ze html by mohla (alespon v jednom miste) byt
trida HTML. Ale tahle trida proste nema v nejake definici body, no bodejd byjo,
atribut se dodefinuje az za behu, podle vzoru z *konfiguracniho souboru*.
A tak dale, a tak porad, po hodince stastlive najdes co autor myslel tim
'content' a jsi stastny, ze python ma duck-typing, a idealni program v pythonu
nepotrebuje vedet typ. Ale nahodny kolemjdouci by za ten typ dal pozlacene
sele.
IOW: Proste metody predpokladaji urcite schopnosti u predavanych objektu.
Ale z pouheho nazvu metody nemuze byt proste jasne, co vsechno ostatniho musi
predavane objekty splnovat, aby byly takove jake autor ocekava.
Metody se pak treba bez modifikaci daji pouzit k ucelum, ke kterym puvodne
nebyly napsane. Pokud je promenna vhodne (a dostatecne obecne) nazvana a kod
dobre okomentovany, je to jeste lepsi.
Na tento problem jsem narazil ve snaze proniknout do projektu trac, nemyslim
si ze by byl nejak nabastleny, nebo spatne dokumentovany, ale proste autora
nenapadalo, ze by nekdo mohl mit problem to co pise pochopit. Ale kdyz na to
misto narazis 'uprosted vety pomoci grepu, protoze potrebujes 'neco rychle
ohnout k obrazu svemu', jses z toho na dve hodiny v lese.
Obdoby pocit jsem mel pri pronikani do (jinak imho pomerne dobre ve zdrojacich
dokumentovaneho) projektu MediaWiki, na kterem bezi wikipedia (je sice v PHP,
ale to je izomorfni).
Pripada mi to jako by nekdo vzal peclive rozebral vyhody a nevyhody
asembleru a objektoveho programovani a z jedne z hromadek udelal python.
vitas
@;;
|