Hogyan tudhatjuk meg, hogy mely beépített típusokból nem lehet örökölni?

Az előző két bejegyzésben egy egyéni igényekre szabott Range osztályt készítettünk mint kompozíciót a beépített range típust felhasználva. Azért nem a range alosztályaként hoztuk létre a Range osztályt, mert a beépített range típusból nem lehet örökölni. Egyben jeleztük azt is, hogy nem csak a range az egyetlen ilyen beépített típus. A kérdés, hogy milyen más osztályok azok, amelyekből nem lehet örökölni.

Erre a kérdésre nem fogunk általános választ kapni a Python hivatalos dokumentációjában. Ezért vagy egyenként vizsgáljuk meg a kiszemelt osztályokat az örökölhetőség szempontjából, vagy általánosabb megoldást keresünk, amely a beépített típusokból, illetve tetszőleges modulban szereplő típusokból kiválogatja azokat, amelyekből nem lehet alosztályt létrehozni. Ez utóbbi megközelítést követjük és ebben a bejegyzésben egy erre alkalmas függvény hozunk létre, amely argumentumai a beimportált vizsgálandó modulok.

A függvény egy lehetséges definícióját láthatjuk alább. A részletes kommentek magyarázzák a működést.

A beépített objektumokat és neveiket a szabványos könyvtár builtins modulja tartalmazza. Általánosan használt egyéb típusokat a types, a typing és például a collections.abc modulokban találunk még. Ezekkel meghívva a következő eredményt kapjuk:

Látható, hogy a legtöbb olyan típus, amely alaposztályként nem használható a types modulban található. Ehhez képest a builtins beépített típusai közül viszonylag legkevesebb ilyen van, amelyek között természetesen ott szerepel a range.

A fenti függvénnyel az előbb említett modulokon felül más modulokat is vizsgálhatunk, ha azokat beimportáljuk és felvesszük a függvény argumentumaként.

E bejegyzés témájához a Python tudásépítés lépésről lépésre című e-könyv következő részei kapcsolódnak különösen: a „Készétel fogyasztás – a szabványos könyvtár moduljainak használata” fejezet, illetve abban a „Típusutalások és statikus típusellenőrzés támogatása” alfejezet, amelyben a typing modullal ismerkedünk, továbbá a „Típusutalások generikus típusokkal” alfejezet, ahol a types modulról van szó, valamint az „Absztrakt osztályok” alfejezet „Készen kapható absztrakt osztályok” alcíme, amely a collections.abc modult tárgyalja, amelyben az absztrakt konténereket reprezentáló osztályok találhatók. Ezen felül a „Ne nyúlj hozzá, ha jót akarsz! – attribútumok priváttá minősítése” fejezet foglalkozik a privát attribútumokkal. Az __all__ attribútumról pedig a „Panelprogram – modulok” fejezetben a „Modul programként történő futtatása” alfejezetben van szó,

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.