( _jack_ | 2012. 03. 16., p – 20:52 )

Igen, amikor begépelem a kódot, akkor ismeretlen. Megnézhetem ugyan könnyen az aktuális állapotot egy Python interpreterben /pl. példányosítom, és hívok egy dir()-t/, de az nem véd meg attól, hogy később, mikor én már megírtam a kódomat, valaki utólag tegyen hozzá egy olyan attribútumot valamelyik ősosztályhoz, amit én már "lestoppoltam" a származtatott osztályban. Ilyenkor hirtelen az egész a feje tetejére áll, mert míg addig a saját osztályom saját attribútumán dolgozott a kódom, ezután hirtelen megváltozik: a saját attribútumom megszűnik létezni, helyette a nevet az ősosztály attribútumára oldja fel az interpreter, és innentől az ősosztály implementációja és az én implementációm ugyanazt az attribútumot fogja használni két különböző dologra.

Persze futási időben lekérdezhetők ezek az attribútumok, de akkor futási időben kellene mindig ellenőrizni (ha jól értem). Persze mint minden, ez is megoldható, csak nyakatekert módon, és az ilyen ellenőrzések amúgy sem "Pythonosak".

Ha jól értem, a Python módszer az, hogy az ilyen véletlenekkel ne foglalkozzunk fejlesztés közben, helyette minden lényeges mozzanatra írjunk unitteszteket. Így az sem baj, ha a kód megkeveredik, mindaddig, amíg a megfigyelhető viselkedése megfelel az elvárásoknak.

De javítsatok ki, ha tévedek.

Szerk.: közben leesett a tantusz - hiszen pont a Python "open kimono" tulajdonsága miatt kívülről is látszik minden. Hát akkor szét is választhatom a paranoiát a production kódtól! Ha elfog a static typeing viszketegség, akkor _kívülről_, egy unit tesztben ellenőrzöm amit akarok, így én is nyugodtan alszom, és a kód sem lesz tele issubclass(), isinstance(), van_e_mar_ilyen_attributum() szerű marhaságokkal.