import *

In [1]:
dir()
Out[1]:
['In',
 'Out',
 '_',
 '__',
 '___',
 '__builtin__',
 '__builtins__',
 '__doc__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 '_dh',
 '_i',
 '_i1',
 '_ih',
 '_ii',
 '_iii',
 '_oh',
 '_sh',
 'exit',
 'get_ipython',
 'quit']
In [2]:
_x1 = dir()
In [3]:
from math import sin, cos, tan
In [4]:
_x2 = dir()
In [5]:
set(_x2)-set(_x1)
Out[5]:
{'_i3', '_i4', '_x1', 'cos', 'sin', 'tan'}
In [6]:
set(_x2)-set(_x1)-set([x for x in _x2 if x.startswith('_')])
Out[6]:
{'cos', 'sin', 'tan'}
In [7]:
_x1 = dir()
In [8]:
from math import *
In [9]:
_x2 = dir()
In [10]:
set(_x2)-set(_x1)-set([x for x in _x2 if x.startswith('_')])
Out[10]:
{'acos',
 'acosh',
 'asin',
 'asinh',
 'atan',
 'atan2',
 'atanh',
 'ceil',
 'copysign',
 'cosh',
 'degrees',
 'e',
 'erf',
 'erfc',
 'exp',
 'expm1',
 'fabs',
 'factorial',
 'floor',
 'fmod',
 'frexp',
 'fsum',
 'gamma',
 'gcd',
 'hypot',
 'inf',
 'isclose',
 'isfinite',
 'isinf',
 'isnan',
 'ldexp',
 'lgamma',
 'log',
 'log10',
 'log1p',
 'log2',
 'modf',
 'nan',
 'pi',
 'pow',
 'radians',
 'sinh',
 'sqrt',
 'tanh',
 'trunc'}

Beispiel eines Pakets "Unternehmen"

Erstellen einer Ordnerstruktur

In [11]:
import os
if not os.path.exists("Unternehmen"):
    os.mkdir("Unternehmen")
if not os.path.exists("Unternehmen/Organisation"):
    os.mkdir("Unternehmen/Organisation")

Erstellen der init.py Dateien

In [12]:
with open("Unternehmen/__init__.py","w") as f:
    f.write("")
In [13]:
with open("Unternehmen/Organisation/__init__.py","w") as f:
    f.write("")

Erstellen einiger Module

In [14]:
%%writefile Unternehmen/Person.py

import datetime

class Person():
    
    def __init__(self,vorname,nachname,geschlecht,gebort,gebdatum):
        self.nachname = nachname
        self.vorname = vorname
        self.geschlecht = geschlecht
        self.gebort = gebort
        if isinstance(gebdatum, datetime.date):
            self.gebdatum = gebdatum
        elif isinstance(gebdatum, str):
            self.gebdatum = datetime.datetime.strptime(gebdatum, "%d.%m.%y").date()
            
    def alter(self):
        return datetime.datetime.now().year - self.gebdatum.year
Writing Unternehmen/Person.py
In [15]:
%%writefile Unternehmen/Adressen.py

class Koordinaten():
    __erdradius = 6378.137 # Äquatorradius in km (WGS84 Referenzellipsoid)
    # siehe https://de.wikipedia.org/wiki/Orthodrome
    
    def __init__(self,ost=0,nord=0):
        self.ost = ost
        self.nord = nord
        
    def distanz(self,andererOrt):
        from math import sin, cos, acos, radians
        lat1 = radians(self.nord)
        lat2 = radians(andererOrt.nord)
        lon1 = radians(self.ost)
        lon2 = radians(andererOrt.ost)
        d = self.__erdradius * acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2) *cos(lon2-lon1))
        return d
    
class Adresse():
    
    def __init__(self,ort,strasse,plz,koordinaten=None):
        self.ort = ort
        self.strasse = strasse
        self.plz = plz
        if koordinaten and isinstance(koordinaten, Koordinaten):
            self.koordinaten = koordinaten
        else:
            self.koordinaten = Koordinaten()
            
__all__ =  ["Koordinaten", "Adresse"]
Writing Unternehmen/Adressen.py
In [20]:
%%writefile Unternehmen/Organisation/Verwaltung.py

from ..Person import Person
from ..Adressen import *

class Mitarbeiter(Person,Adresse):
    
    def __init__(self,person,abteilung,funktion,gehalt):
        if isinstance(person, Person):
            self.person = person
        else:
            print("keine Person angegeben")
        self.abteilung = abteilung
        self.funktion = funktion
        self.gehalt = gehalt
        
    def adresse(self,adresse):
        if isinstance(adresse, Adresse):
            self.adresse = adresse
        else:
            print("keine Adresse angegeben")
            
    def mitarbeiterZugang(self,ma):
        if isinstance(ma, Mitarbeiter):
            self.mitarbeiter.append(ma)
        else:
            print("kein Mitarbeiter angegeben")
    
    def mitarbeiterWeggang(self,ma):
        if isinstance(ma, Mitarbeiter):
            del self.mitarbeiter[self.mitarbeiter.index(ma)]
        else:
            print("kein Mitarbeiter angegeben")
Overwriting Unternehmen/Organisation/Verwaltung.py
In [17]:
%%writefile Unternehmen/Organisation/Abteilungen.py

from .Verwaltung import Mitarbeiter

class Abteilung(Mitarbeiter):
    
    def __init__(self,mitarbeiter):
        self.mitarbeiter = []
        if isinstance(mitarbeiter, list):
            for ma in mitarbeiter:
                if isinstance(ma, Mitarbeiter) and ma.abteilung == self.name:
                    self.mitarbeiter.append(ma)
                    if ma.funktion == "Leiter":
                        self.leiter = ma
                    elif ma.funktion == "Stellvertreter":
                        self.stellvertreter = ma
                        
class Einkauf(Abteilung):
    name = "Einkauf"
    
    def __init__(self,mitarbeiter):
        super(Einkauf, self).__init__(mitarbeiter)
        
class Verkauf(Abteilung):
    name = "Verkauf"
    
    def __init__(self,mitarbeiter):
        super(Verkauf, self).__init__(mitarbeiter)
        
class Verwaltung(Abteilung):
    name = "Verwaltung"
    
    def __init__(self,mitarbeiter):
        super(Verwaltung, self).__init__(mitarbeiter)
        
__all__ = ["Einkauf", "Verkauf", "Verwaltung"]
Writing Unternehmen/Organisation/Abteilungen.py

Benutzung des Pakets unter Verwendung der Fake-Adressen

In [18]:
spalten="Geschlecht,Vorname,Nachname,Strasse,Ort,Plz,Email,Telefon,Gebdatum,Nord,Ost"
personen="""M,Mathias,Zimmer,Buelowstrasse 82,Oberrod,56479,MathiasZimmer@gmx.de,02664 99 74 68,27.03.82,50.530761,7.980033
M,Torsten,Müller,Paderborner Strasse 23,Erdweg,85253,TorstenMuller@kabel.de,08254 27 03 80,31.05.91,48.310973,11.335096
M,Thomas,Neudorf,Fontenay 41,Kronach,96313,ThomasNeudorf@gmx.de,09261 66 53 16,07.07.46,50.273421,11.407716
W,Angelika,Nussbaum,An Der Urania 60,Husum,25805,AngelikaNussbaum@rhyta.com,04841 42 23 87,16.08.32,54.561832,9.151079
M,Jonas,Weissmüller,Sonnenallee 34,Augsburg,86044,JonasWeissmuller@telekom.de,0821 51 24 61,13.04.68,48.353975,10.910581
M,Stefan,Busch,Alt-Moabit 22,Wurzen,4801,StefanBusch@1und1.de,03425 65 19 75,28.06.56,51.380197,12.837981
M,Felix,Herz,Kastanienallee 98,Osteel,26529,FelixHerz@1und1.de,04934 60 24 76,08.12.97,53.450546,7.20508
W,Martina,Bumgarner,Hardenbergstraße 50,Rehweiler,66907,MartinaBumgarner@vodafon.de,06383 47 26 81,15.02.46,49.480584,7.435079
W,Doreen,Hoch,Straße der Pariser Kommune 44,Köln Rodenkirchen,50996,DoreenHoch@rhyta.com,0221 36 87 52,10.08.96,50.811933,7.040219
M,Steffen,Hueber,Frankfurter Allee 2,Karlsruhe Daxlanden,76189,SteffenHueber@congstar.de,0721 23 96 58,22.04.79,49.090142,8.397664
M,Steffen,Mayer,Kurfürstenstraße 8,Eschenbach,92671,SteffenMayer@kabel.de,07161 56 96 94,27.01.81,48.676098,9.628519
M,Kevin,Kastner,Charlottenstrasse 48,Cottbus,3050,KevinKastner@gmx.de,0355 58 83 10,19.02.48,51.733721,14.431042
W,Susanne,Weissmüller,Rosenstrasse 3,München,81675,SusanneWeissmuller@telekom.de,089 70 86 18,11.11.57,48.220319,11.695522
M,Marcel,Boehm,Alter Wall 43,Gollhofen,97258,MarcelBoehm@cuvox.de,09339 89 94 42,31.12.78,49.52431,10.159784
M,Michael,Konig,Inge Beisheim Platz 40,Kirchgellersen,21394,MichaelKonig@cuvox.de,04135 75 33 09,14.11.35,53.277876,10.155416
W,Johanna,Boehm,Genslerstraße 91,Berlin Schöneberg,10825,JohannaBoehm@vodafon.de,030 75 91 23,17.02.40,52.541938,13.395334
W,Daniela,Hartmann,Gubener Str. 9,Rosenheim,83026,DanielaHartmann@web.de,08031 69 53 65,25.06.34,47.833694,12.01175
W,Leonie,Klug,Rohrdamm 59,Bad Salzuflen Holzhausen,32108,LeonieKlug@cuvox.de,05208 70 42 84,03.02.70,52.049233,8.826827
M,Florian,Jung,Gotzkowskystrasse 55,Dohr,56812,FlorianJung@rhyta.com,02671 63 54 64,28.02.93,50.092006,7.101282
M,Martin,Gersten,Rudower Strasse 18,Lascheid,54597,MartinGersten@telekom.de,06556 10 73 02,16.10.70,50.28629,6.515705
W,Heike,Herman,Messedamm 93,Dresden,1131,HeikeHerman@kabel.de,0351 74 61 85,08.03.74,51.086195,13.790194
W,Sarah,Köhler,Invalidenstrasse 96,Ruppertsberg,67152,SarahKoehler@web.de,06326 93 97 78,02.06.93,49.333561,8.207738
W,Sabrina,Drescher,Guentzelstrasse 6,Ebersburg,36157,SabrinaDrescher@telekom.de,06656 25 78 89,06.02.91,50.552373,9.781745
M,Wolfgang,Gottschalk,Brandenburgische Str. 16,Erlenbach,63902,WolfgangGottschalk@web.de,07132 16 70 86,11.12.31,47.957794,8.086371
M,Wolfgang,Fisher,Schönhauser Allee 99,Emmendingen,79312,WolfgangFisher@gmx.de,07641 27 41 15,26.10.75,48.101633,7.770728
M,Daniel,Koertig,Luetzowplatz 48,Ehlenz,54636,DanielKoertig@kabel.de,06569 99 21 64,31.10.53,50.06716,6.342487
W,Annett,Boehm,Budapester Strasse 93,Gyhum,27404,AnnettBoehm@kabel.de,04288 48 86 09,21.07.44,53.245072,9.258132
M,Kristian,Gerber,Reeperbahn 64,Zwickau,8066,KristianGerber@web.de,037607 48 54,30.07.74,50.778603,12.566214
M,Thorsten,Kunze,Straße der Pariser Kommune 71,Köln Mülheim,51063,ThorstenKunze@cuvox.de,0221 61 98 68,06.07.77,50.912801,6.933286
W,Christine,Beich,Straße der Pariser Kommune 16,Köln Kalk,51109,ChristineBeich@gmx.de,0221 41 72 22,21.01.93,51.019736,7.099108
M,Mario,Farber,Invalidenstrasse 86,Hainfeld,76835,MarioFarber@telekom.de,06323 84 88 31,12.11.42,49.253485,8.167636
W,Laura,Gerste,Bayreuther Strasse 18,Reutlingen Gönningen,72770,LauraGerste@gustr.com,071 33 62 11,27.10.78,48.395319,9.086912
M,Ralf,Schröder,Hardenbergstraße 29,Schwanheim,76848,RalfSchroder@congstar.de,06392 21 03 75,06.12.66,49.274311,7.876453
M,Jörg,Hertzog,An der Alster 23,Krakow,18290,JorgHertzog@rhyta.com,038451 71 69,22.04.82,53.629202,12.326508
M,Maximilian,Abt,Landsberger Allee 27,München,80324,MaximilianAbt@congstar.de,089 10 64 76,10.01.71,48.051394,11.484411
M,Dennis,Nacht,Nuernbergerstrasse 15,Eutin,23693,DennisNacht@kabel.de,04521 93 53 33,05.08.41,54.158818,10.688799
M,Torsten,Weiss,Landsberger Allee 38,München,80602,TorstenWeiss@rhyta.com,089 96 75 89,21.03.45,48.076066,11.622793
W,Leonie,Wolf,Hollander Strasse 17,Biebertal,35444,LeonieWolf@cuvox.de,06409 10 68 95,13.10.56,50.69536,8.516227
M,Swen,Ebersbacher,Holstenwall 19,Abberode,6543,SwenEbersbacher@telekom.de,034779 14 40,21.10.39,51.570154,11.294344
M,Martin,Thalberg,Mohrenstrasse 63,Albstadt Burgfelden,72459,MartinThalberg@cuvox.de,07431 43 39 99,03.03.37,48.263463,8.945908"""

importieren der notwendigen Module des Pakets

In [21]:
from Unternehmen.Person import Person
from Unternehmen.Adressen import Adresse, Koordinaten
from Unternehmen.Organisation.Verwaltung import Mitarbeiter
from Unternehmen.Organisation.Abteilungen import *

erstellen der Mitarbeiter des Unternehmens und verteilen auf die einzelnen Abteilungen

In [22]:
mitarbeiterliste = []
abteilungen = ["Verwaltung", "Einkauf", "Verkauf"]
maIndx = [(0,12),(12,25),(25,40)]
lines = personen.split('\n')
i = 0
for line in lines:
    p = dict(zip(spalten.split(','),line.split(',')))
    koord = Koordinaten(p["Nord"],p["Ost"])
    person = Person(p["Vorname"],p["Nachname"],p["Geschlecht"],p["Ort"],p["Gebdatum"])
    adresse = Adresse(p["Ort"],p["Strasse"],p["Plz"],koord)
    for a in abteilungen:
        indx = abteilungen.index(a)
        if maIndx[indx][0] <= i < maIndx[indx][1]:
            if i == maIndx[indx][0]:
                f = "Leiter"
                g = 3000
            elif i == maIndx[indx][0]+1:
                f = "Stellvertreter"
                g = 2800
            else:
                f = "Mitarbeiter"
                g = 2500
            mitarbeiter = Mitarbeiter(person,a,f,g)
            mitarbeiter.adresse = adresse
            mitarbeiterliste.append(mitarbeiter)
    i += 1
    
einkauf = Einkauf(mitarbeiterliste)
verkauf = Verkauf(mitarbeiterliste)
verwaltung = Verwaltung(mitarbeiterliste)

Benutzen der in die einzelnen Abteilungen verteilten Mitarbeiter

In [24]:
for abteilung in [verwaltung,einkauf,verkauf]:
    print("Die Anzahl der Mitarbeiter in der Abteilung {} ist {}".format(abteilung.name,len(abteilung.mitarbeiter)))
    
    if abteilung.leiter.person.geschlecht == "M":
        print("Der Leiter der Abteilung {} ist {} {}".format(abteilung.name,
                                                             abteilung.leiter.person.vorname,
                                                             abteilung.leiter.person.nachname))
    else:
        print("Die Leiterin der Abteilung {} ist {} {}".format(abteilung.name,
                                                               abteilung.leiter.person.vorname,
                                                               abteilung.leiter.person.nachname))
    if abteilung.stellvertreter.person.geschlecht == "M":
        print("Der Stellvertreter der Abteilung {} ist {} {}".format(abteilung.name,
                                                             abteilung.stellvertreter.person.vorname,
                                                             abteilung.stellvertreter.person.nachname))
    else:
        print("Die Stellvertreterin der Abteilung {} ist {} {}".format(abteilung.name,
                                                               abteilung.stellvertreter.person.vorname,
                                                               abteilung.stellvertreter.person.nachname))
Die Anzahl der Mitarbeiter in der Abteilung Verwaltung ist 12
Der Leiter der Abteilung Verwaltung ist Mathias Zimmer
Der Stellvertreter der Abteilung Verwaltung ist Torsten Müller
Die Anzahl der Mitarbeiter in der Abteilung Einkauf ist 13
Die Leiterin der Abteilung Einkauf ist Susanne Weissmüller
Der Stellvertreter der Abteilung Einkauf ist Marcel Boehm
Die Anzahl der Mitarbeiter in der Abteilung Verkauf ist 15
Der Leiter der Abteilung Verkauf ist Daniel Koertig
Die Stellvertreterin der Abteilung Verkauf ist Annett Boehm