python-kurs-softed/notebooks/objects.ipynb

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
}