-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path3-import.py
More file actions
87 lines (62 loc) · 2.32 KB
/
3-import.py
File metadata and controls
87 lines (62 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Import your Stuff
# als erstes machen wir mal eine Datei foo.py, mit einer Klasse namens bar, die
# wir dann in einem anderen Programm
# benutzen wollen.
class bar(object):
def __init__(self):
self._text = "Ich bin bar aus foo oder auch foobar genannt!"
self.endline = "---------------------------------------------------"
def _printStuff(self, txt):
print(txt)
print(self.endline)
def printText(self):
print(self._text)
print(self.endline)
# Jetzt erstellt man eine zweite Datei test.py, in der wir den neuen code importieren
import foo
foobar = foo.bar()
foobar._printStuff("This is a Test")
foobar.printText()
# alternativ kann man auch
from foo import bar
# schreiben, wobei die Instanziierung dann so lauten müsste:
foobar = bar()
# eine weitere Alternative:
from foo import *
# hier wird wie bei "from foo import bar" importiert jedoch sollten noch mehr
# klassen vorhanden sein, so würden diese mit importiert werden.
# Jetzt legen wir ein Unterverzeichnis namens testlib an
# und erstellen mit touch __init__.py eine leere Datei in diesem Verzeichnis
# Die Datei ist dafür verantwortlich, dass Python mit import in diesem Verzeichnis sucht.
# danach verschieben wir die date foo.py in den neuen Unterordner.
# der Import sieht daraufhin wie folgt aus:
import testlib.foo
# und die Instanziierung
foobar = testlib.foo.bar()
# jetzt noch ein klein wenig magic...
# wir schreiben in die datei foo.py unter die Klasse noch ein wenig normalen code
# und führen den import wie oben noch einmal aus
# unter der classe:
foobar = bar()
i=0
while i < 10:
foobar.printText()
i += 1
# wie man sehen kann, wird der code beim instanziieren automatisch mit ausgeführt
# das will man eigentlich nicht. Aus diesem Grund benutzt man main um Testcode
# in seine Libery zu implementieren. Dieser wird nur dann ausgeführt,
# wenn die Datei direkt ausgeführt wird. Ansonsten werden nur die
# betreffenden Elemente importiert.
class main(object):
def __init__(self):
foobar = bar()
i = 0
while i < 10:
foobar.printText()
i += 1
if __name__== "__main__":
start = main()
# schau __all__ das muss auf Modulebene implementiert werden um festzulegen,
# was man nicht importieren soll