In python refereren naar root niveau?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 10-10 17:48

geerttttt

Manisch positief

Topicstarter
Ik heb een python script die ik meestal importeer en dan daarop een functie aanroep bijv:
code:
1
2
import test
test.helloworld();


Nu wil ik soms dit stuk code ook kunnen uitvoeren vanuit mijn test.py script.
Alleen, als ik vanuit daar refereer naar test.helloworld(); weet hij niet wat ik bedoel uiteraard. Dan moet je gewoon helloworld(); aanroepen. Maar, ik wil dit stuk code gewoon kunnen uitvoeren!

Hoe kan ik dat oplossen? Ik zat al aan het volgende te denken:
code:
1
2
test = self;
test.helloworld();


Maar dat werkt niet...

Oost west, 127.0.0.1 best!


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Alhoewel ik twijfel of je dit wel echt wilt doen, kun je in test.py de module test zichzelf laten importeren met
code:
1
import test

of je kunt de module uit sys.modules plukken
code:
1
2
import sys
test = sys.modules[__name__]


In beide gevallen blijf je echter zitten met een recursieve self reference (test.test.test.test ...)

[ Voor 4% gewijzigd door narotic op 18-05-2016 13:49 ]

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 10-10 17:48

geerttttt

Manisch positief

Topicstarter
Ik heb een deel van de tweede optie gebruikt, die is eigenlijk juist perfect voor wat ik wil en geeft volgensmij geen infinite loop.
code:
1
2
test = sys.modules[__name__];
test.helloworld();

Dit werkt bij mij en je krijgt hiermee volgensmij geen loop :)

Oost west, 127.0.0.1 best!


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Ik ben vrij zeker van wel en beide opties zouden voor de rest exact hetzelfde moeten zijn. Probeer maar eens:
code:
1
test.test.test.test.test.test.test.helloworld()


Overigens kun je die puntkomma's in python gerust weglaten he :)

[ Voor 15% gewijzigd door narotic op 18-05-2016 15:32 ]

- = Step Into The Pit | Industrial Strength = -