338 lines
9.4 KiB
Plaintext
338 lines
9.4 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Objekte und OO-Programmierung"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"```py\n",
|
||
|
"# Ausgangslage\n",
|
||
|
"employees = {\n",
|
||
|
" \"name 1\": {\n",
|
||
|
" \"salary\": ...,\n",
|
||
|
" \"skills\": [...],\n",
|
||
|
" },\n",
|
||
|
" \"name 2\": {\n",
|
||
|
" \"salary\": ...,\n",
|
||
|
" \"skills\": [...],\n",
|
||
|
" },\n",
|
||
|
" ...\n",
|
||
|
"}\n",
|
||
|
"```"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Unknown\n",
|
||
|
"0\n",
|
||
|
"[]\n",
|
||
|
"Unknown\n",
|
||
|
"0\n",
|
||
|
"[]\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"class Employee:\n",
|
||
|
" name = \"Unknown\"\n",
|
||
|
" gehalt = 0\n",
|
||
|
" skills = []\n",
|
||
|
"\n",
|
||
|
"employee1 = Employee()\n",
|
||
|
"print(employee1.name)\n",
|
||
|
"print(employee1.gehalt)\n",
|
||
|
"print(employee1.skills)\n",
|
||
|
"\n",
|
||
|
"employee2 = Employee()\n",
|
||
|
"print(employee2.name)\n",
|
||
|
"print(employee2.gehalt)\n",
|
||
|
"print(employee2.skills)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Joe Doe\n",
|
||
|
"Unknown\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"employee1.name = \"Joe Doe\"\n",
|
||
|
"print(employee1.name)\n",
|
||
|
"print(employee2.name)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Init!\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"class Employee:\n",
|
||
|
" def __init__(self):\n",
|
||
|
" print(\"Init!\")\n",
|
||
|
" \n",
|
||
|
"employee3 = Employee()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"<class '__main__.Employee'>\n",
|
||
|
"Joe Doe\n",
|
||
|
"2000\n",
|
||
|
"[]\n",
|
||
|
"Jane Oh\n",
|
||
|
"3000\n",
|
||
|
"['marketing']\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"class Employee:\n",
|
||
|
" def __init__(self, name=\"\", gehalt=0, skills=[]):\n",
|
||
|
" self.name = name\n",
|
||
|
" self.gehalt = gehalt\n",
|
||
|
"\n",
|
||
|
" if skills is None:\n",
|
||
|
" self.skills = []\n",
|
||
|
" else:\n",
|
||
|
" self.skills = skills\n",
|
||
|
"\n",
|
||
|
"employee4 = Employee(\"Joe Doe\", 2000, [])\n",
|
||
|
"print(type(employee4))\n",
|
||
|
"print(employee4.name)\n",
|
||
|
"print(employee4.gehalt)\n",
|
||
|
"print(employee4.skills)#\n",
|
||
|
"\n",
|
||
|
"employee5 = Employee(\"Jane Oh\", 3000, [\"marketing\"])\n",
|
||
|
"print(employee5.name)\n",
|
||
|
"print(employee5.gehalt)\n",
|
||
|
"print(employee5.skills)\n",
|
||
|
"\n",
|
||
|
"# Geht nicht, weil die Klasse kein Attribut \"name\" definiert\n",
|
||
|
"#print(Employee.name)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"\n",
|
||
|
"0\n",
|
||
|
"[]\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"employee6 = Employee()\n",
|
||
|
"print(employee6.name)\n",
|
||
|
"print(employee6.gehalt)\n",
|
||
|
"print(employee6.skills)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 6,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Employee 'Bob Smith'\n",
|
||
|
" gehalt: 0\n",
|
||
|
" skills:\n",
|
||
|
" - software development\n",
|
||
|
" - it support\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"class Employee:\n",
|
||
|
" def __init__(self, name=\"\", gehalt=0, skills=[]):\n",
|
||
|
" self.name = name\n",
|
||
|
" self.gehalt = gehalt\n",
|
||
|
"\n",
|
||
|
" if skills is None:\n",
|
||
|
" self.skills = []\n",
|
||
|
" else:\n",
|
||
|
" self.skills = skills\n",
|
||
|
"\n",
|
||
|
" def __str__(self):\n",
|
||
|
" s = [f\"Employee '{self.name}'\"]\n",
|
||
|
" s.append(f\" gehalt: {self.gehalt}\")\n",
|
||
|
" s.append(f\" skills:\")\n",
|
||
|
" for skill in self.skills:\n",
|
||
|
" s.append(f\" - {skill}\")\n",
|
||
|
" return \"\\n\".join(s)\n",
|
||
|
"\n",
|
||
|
"\"\"\"\n",
|
||
|
"Employee 'name':\n",
|
||
|
" gehalt: XXX\n",
|
||
|
" skills:\n",
|
||
|
" - skill 1\n",
|
||
|
" - skill 2\n",
|
||
|
"\"\"\"\n",
|
||
|
"employee7 = Employee(name=\"Bob Smith\", skills=[\"software development\", \"it support\"])\n",
|
||
|
"print(employee7)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Hallo, Welt\n",
|
||
|
"Guten Tag, Welt\n",
|
||
|
"Welt, Guten Tag\n",
|
||
|
"Welt, Guten Tag\n",
|
||
|
"Guten Tag, Welt\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Exkurs: Strings und `format()`\n",
|
||
|
"\n",
|
||
|
"s = \"Hallo, {}\"\n",
|
||
|
"print(s.format(\"Welt\"))\n",
|
||
|
"\n",
|
||
|
"s = \"{}, {}\"\n",
|
||
|
"print(s.format(\"Guten Tag\", \"Welt\"))\n",
|
||
|
"\n",
|
||
|
"s = \"{name}, {grussformel}\"\n",
|
||
|
"print(s.format(grussformel=\"Guten Tag\", name=\"Welt\"))\n",
|
||
|
"\n",
|
||
|
"grussformel=\"Guten Tag\"\n",
|
||
|
"name=\"Welt\"\n",
|
||
|
"print(f\"{name}, {grussformel}\")\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"def sagehallo(name):\n",
|
||
|
" # 'grussformel' ist eine globale variable!\n",
|
||
|
" print(f\"{grussformel}, {name}\")\n",
|
||
|
"\n",
|
||
|
"sagehallo(\"Welt\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 9,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"5000\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"ename": "ValueError",
|
||
|
"evalue": "Zu hohes gehalt!",
|
||
|
"output_type": "error",
|
||
|
"traceback": [
|
||
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
|
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
|
||
|
"\u001b[1;32m/home/chris/work/python-kurs-softed/notebooks/objects.ipynb Cell 10\u001b[0m line \u001b[0;36m2\n\u001b[1;32m <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=21'>22</a>\u001b[0m \u001b[39mprint\u001b[39m(employee8\u001b[39m.\u001b[39mgehalt)\n\u001b[1;32m <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=22'>23</a>\u001b[0m \u001b[39m# ValueError!\u001b[39;00m\n\u001b[0;32m---> <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=23'>24</a>\u001b[0m employee8\u001b[39m.\u001b[39;49mset_gehalt(\u001b[39m4000\u001b[39;49m)\n\u001b[1;32m <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=24'>25</a>\u001b[0m \u001b[39m# TypeError!\u001b[39;00m\n\u001b[1;32m <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=25'>26</a>\u001b[0m employee8\u001b[39m.\u001b[39mset_gehalt(\u001b[39m\"\u001b[39m\u001b[39mein sack mehl\u001b[39m\u001b[39m\"\u001b[39m)\n",
|
||
|
"\u001b[1;32m/home/chris/work/python-kurs-softed/notebooks/objects.ipynb Cell 10\u001b[0m line \u001b[0;36m1\n\u001b[1;32m <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mgehalt \u001b[39m=\u001b[39m neues_gehalt\n\u001b[1;32m <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=15'>16</a>\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m---> <a href='vscode-notebook-cell:/home/chris/work/python-kurs-softed/notebooks/objects.ipynb#X12sZmlsZQ%3D%3D?line=16'>17</a>\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mZu hohes gehalt!\u001b[39m\u001b[39m\"\u001b[39m)\n",
|
||
|
"\u001b[0;31mValueError\u001b[0m: Zu hohes gehalt!"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"class Employee:\n",
|
||
|
" def __init__(self, name=\"\", gehalt=0, skills=[]):\n",
|
||
|
" self.name = name\n",
|
||
|
" self.gehalt = gehalt\n",
|
||
|
"\n",
|
||
|
" if skills is None:\n",
|
||
|
" self.skills = []\n",
|
||
|
" else:\n",
|
||
|
" self.skills = skills\n",
|
||
|
"\n",
|
||
|
" def set_gehalt(self, neues_gehalt):\n",
|
||
|
" if not isinstance(neues_gehalt, int):\n",
|
||
|
" raise TypeError(\"gehalt muss ein Integer sein\")\n",
|
||
|
" if neues_gehalt < 4000:\n",
|
||
|
" self.gehalt = neues_gehalt\n",
|
||
|
" else:\n",
|
||
|
" raise ValueError(\"Zu hohes gehalt!\")\n",
|
||
|
"\n",
|
||
|
"employee8 = Employee()\n",
|
||
|
"# Ok\n",
|
||
|
"employee8.gehalt = 5000\n",
|
||
|
"print(employee8.gehalt)\n",
|
||
|
"# ValueError!\n",
|
||
|
"employee8.set_gehalt(4000)\n",
|
||
|
"# TypeError!\n",
|
||
|
"employee8.set_gehalt(\"ein sack mehl\")\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "softed",
|
||
|
"language": "python",
|
||
|
"name": "softed"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 3
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython3",
|
||
|
"version": "3.11.8"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|