[python-nl] Classes in andere modules

Rob Hooft rob at hooft.net
Thu Feb 2 18:42:56 CET 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Math wrote:
> *Mag ik je nog een laatste vraag stellen?*
> *Iets wat ik niet helemaal kan doorgronden....*
> *In de 1e module importeer ik de 2e module en om een object in de 1e
> module te benaderen vanuit de 2e module importeer ik de 1e module in de
> 2e module (KAN DIT??).*
> *En dan gaat het fout.......dan kan die in de 2e module geen classes
> meer vinden.....*

Je kunt wel modules gebruiken in elkaar. Alleen is het geen echt teken
van goed softwareontwerp. Als je software in lagen schrijft, heb je
vanuit elke laag alleen modules uit een lagere laag nodig.

Soms zijn er uitzonderingen, en daarom kan het wel. Je moet dan alleen
precies weten in welke volgorde python de zaak uitvoert. Statements in
een bestand worden onmiddellijk uitgevoerd, behalve als ze in een
functie of andere definitie staan.

Dus: In module A staat bovenin een "import B". Daar begint de compiler
meteen aan het importeren van B; de rest van A is dus nog niet bekend.
Als bovenin B dan "import A" staat mag dat wel, alleen op dit moment is
die A nog leeg, we zijn nog bezig om die module te importeren. Als je
dus voor de definities in B klassen in A nodig hebt, kan dat niet. Als B
helemaal ingeladen is, wordt daarna het laden van A afgemaakt. Daarna
kunnen functies uit B die je aanroept dus wel bij alles wat in A is gestopt.

Dus

===a.py=====
import b

def foo():
    return "bar"

b.test()
====b.py====
import a

print a.foo() # Dit kan niet!

def test():
    print a.foo() # Dit kan wel.
============

Rob

- --
Rob W.W. Hooft  ||  rob at hooft.net  ||  http://www.hooft.net/people/rob/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFD4kSfH7J/Cv8rb3QRAq9FAJsHBOkJtaKJCj39nKQ2cI9tRN2fygCeMxGp
7oMBObcVZW8dKdnM1Tz6f58=
=fyi+
-----END PGP SIGNATURE-----


More information about the Python-nl mailing list