[python] Brainstorm request: Vyuka programovani na gymplu

Filip Štědronský regnarg na seznam.cz
Sobota Červen 14 12:07:44 CEST 2008


On So, čen 14, 2008 at 12:27:47 +0200, slush wrote:
> No vidite, a prave tohle prijde nelogicke zase mne. Pokud predefinuji tridu
> str, cekal bych, ze dalsi instance teto tridy bude pouzivat moji
> customizaci.

Dobrý den, vy NEPŘEDEFINUJETE třídu, protože nic takového
v Pythonu neexistuje. Vy vytvoříte NOVOU třídu, která je
ODVOZENÁ od třídy str, ale je to jiná třída, nezávislá
entita, a ČISTĚ NÁHODOU ji také pojmenujete str. Takže
nic není předefinované, máte DVĚ různé třídy. Chování
jejich instancí tedy záleží na tom, instanci KTERÉ třídy
vytvoříte. A nikde není dáno že to musí být ta nová. Tu
třídu jste vytvořil v určitém NAMESPACE a pokud k ní
Python dojde prostřednictvím pravidel pro vyhodnocování
názvů, použije ji. V jiném modulu však již třeba bude str
ukazovat na původní třídu (__builtin__.str), JEJÍŽ
chování změnit NELZE (alespoň ne nastíněným způsobem). A
NIKDE není dáno, ani z ničeho nevyplývá, že by pro KAŽDOU
řetězcovou konstantu měl Python vyhledávat, zda se
nevyskytuje v aktuálním namespace třída str.

Proč by to dělal ? Jeho úkolem je vytvořit řetězec a to
je jednoznačný datový typ. Z definice vyplývá, že
apostrofy/uvozovky vytváří ŘETĚZEC, řetězec jak jej chápe
Python, instanci původní třídy, jejíž název "str" vůbec
není podstatný, protože se na ni Python odkazuje přímo.
Není to žádná výjimka ani nelogičnost, je to součást
systému. Co by se jinak stalo, kdyby uživatel omylem
napsal str=None ? Měl by se kvůli tomu zhroutit
interpreter ? A jak nákladné by asi bylo pro každý
řetězec znovu lexikálně prohledávat název str ? A jaký by
k tomu měl být důvod ? Řetězec má jasnou strukturu a
vlastnosti, není jediný důvod, proč by jej někdo měl
měnit. Pravidla platí všeude stejná, jen je třeba je
důkladně pochopit.

Přeji hezký den

-- 
regnarg --- http://rg.pretel.cz -- JID: regnarg na jabber.cz
V péči o štěstí druhých nacházíme své vlastní.   --Platón
Přátelství může trvat jedině mezi dobrými lidmi. --Cicero



Další informace o konferenci Python