ProgrammatiePython ontwikkelaar

Vertel over de kenmerken van naamruimten (namespaces) en modules in Python. Hoe werken imports en hoe vermijd je naamconflicten in een groot project?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In Python is een naamruimte (namespace) een woordenboek dat namen en objecten koppelt. De niveaus van naamruimten zijn: lokaal, globaal, en ingebouwd. Modules zijn aparte ruimtes voor het organiseren van code. Bij het importeren creëert Python een nieuwe naamruimte voor elke module.

Werking van import

  • import module — importeert de module en geeft toegang tot objecten via module.name.
  • from module import name — importeert een object uit de module direct in de huidige ruimte (risico op naamconflicten).
  • as — stelt je in staat een alias op te geven.

Om naamconflicten te vermijden:

  • Gebruik expliciete module-imports (import mymodule), en geen sterretje (from... import *).
  • Organiseer je project met behulp van pakketten (mappen met __init__.py).
  • Gebruik unieke, beschrijvende namen;
  • Gebruik aliassen (import module as m).

Voorbeeldstructuur

project/
  package/
    __init__.py
    module1.py
    module2.py
import package.module1 from package.module2 import function as fn

Misleidende vraag.

Vraag: Wat gebeurt er als een module twee keer wordt geïmporteerd? Wordt de hele code van de module opnieuw uitgevoerd?

Antwoord: Nee. Bij de eerste import wordt de module uitgevoerd en het resultaat wordt gecached in sys.modules. Een herhaalde import retourneert al het geladen module-object, de code wordt niet opnieuw uitgevoerd.

# module.py print('Hallo!') # main.py import module # zal Hallo! afdrukken import module # niets zal worden afgedrukt

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp.


Verhaal

Ontwikkelaars gebruikten from settings import * in verschillende modules, waardoor lokale variabelen onverwachts "overschreven" werden bij het wijzigen van instellingen, wat leidde tot moeilijk opspoorbare bugs.

Verhaal

In een groot project creëerden verschillende teams modules met dezelfde namen (bijvoorbeeld, utils.py). Tijdens de integratiefase vervingen de modules met "dezelfde" naam elkaar, resulterend in onverwacht gedrag en complexe bugs.

Verhaal

In een van de bibliotheken probeerden ze een module "warm opnieuw te importeren" met nieuwe instellingen via importlib.reload. Ze hielden er geen rekening mee dat al geïmporteerde andere modules de oude referenties naar objecten bewaarden, waardoor wijzigingen niet in alle delen van de applicatie werden toegepast.