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: [EMAIL PROTECTED] 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 _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
