Skip to content
Snippets Groups Projects
Commit ebfe2d34 authored by Christof Kaufmann's avatar Christof Kaufmann
Browse files

Notebooks from ckaufmann/akis-python-framework@45da95e0

parent 70ec075f
No related branches found
No related tags found
No related merge requests found
Showing
with 1916 additions and 0 deletions
%% Cell type:markdown id:0001-84dad4d119684fc3e7dadaa844c7c44fa65743dac0121eef85a1995dcac tags:
# Smartphone
Gegeben sei eine Klasse `Smartphone` mit dem Attribut `model`.
%% Cell type:code id:0002-a1718e279341c1963428a563f37b85ec5b37ec21f0f07582c3fac30e3c5 tags:
```
class Smartphone:
def __init__(self, model):
self.model = model
# __eq__ wird bei a == b mit self=a und other=b aufgerufen
def __eq__(self, other):
return self.model == other.model
```
%% Cell type:markdown id:0004-fac61a1dac817d3f21af436c6156999707559468a10ebcb184c97e6179f tags:
<p><img
src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTQ4LjA4OHB0IiBoZWlnaHQ9Ijk5LjgxMXB0IiB2aWV3Qm94PSIwIDAgMTQ4LjA4OCA5OS44MTEiIHZlcnNpb249IjEuMSI+CjxkZWZzPgo8Zz4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAxLjIxODc1IDAgTCAxMS4xNzE4NzUgMCBMIDExLjE3MTg3NSAtMTQuNDIxODc1IEwgMS4yMTg3NSAtMTQuNDIxODc1IFogTSAyLjQyMTg3NSAtMS4yMTg3NSBMIDIuNDIxODc1IC0xMy4yMDMxMjUgTCA5Ljk2ODc1IC0xMy4yMDMxMjUgTCA5Ljk2ODc1IC0xLjIxODc1IFogTSAyLjQyMTg3NSAtMS4yMTg3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMTAuODU5Mzc1IC05LjI5Njg3NSBDIDE0LjI4MTI1IC05LjI5Njg3NSAxNy4wNDY4NzUgLTEyLjA2MjUgMTcuMDQ2ODc1IC0xNS40ODQzNzUgQyAxNy4wNDY4NzUgLTE4LjkwNjI1IDE0LjI4MTI1IC0yMS42ODc1IDEwLjg1OTM3NSAtMjEuNjg3NSBDIDcuNDM3NSAtMjEuNjg3NSA0LjY1NjI1IC0xOC45MDYyNSA0LjY1NjI1IC0xNS40ODQzNzUgQyA0LjY1NjI1IC0xMi4wNjI1IDcuNDM3NSAtOS4yOTY4NzUgMTAuODU5Mzc1IC05LjI5Njg3NSBaIE0gMTUuMTcxODc1IC03LjczNDM3NSBMIDE0LjM3NSAtNy43MzQzNzUgQyAxMy4zMTI1IC03LjIzNDM3NSAxMi4xMjUgLTYuOTY4NzUgMTAuODU5Mzc1IC02Ljk2ODc1IEMgOS41OTM3NSAtNi45Njg3NSA4LjQwNjI1IC03LjIzNDM3NSA3LjMxMjUgLTcuNzM0Mzc1IEwgNi41MTU2MjUgLTcuNzM0Mzc1IEMgMi45MjE4NzUgLTcuNzM0Mzc1IDAgLTQuODI4MTI1IDAgLTEuMjM0Mzc1IEwgMCAwLjc2NTYyNSBDIDAgMi4wNjI1IDEuMDQ2ODc1IDMuMDkzNzUgMi4zMjgxMjUgMy4wOTM3NSBMIDE5LjM1OTM3NSAzLjA5Mzc1IEMgMjAuNjQwNjI1IDMuMDkzNzUgMjEuNjg3NSAyLjA2MjUgMjEuNjg3NSAwLjc2NTYyNSBMIDIxLjY4NzUgLTEuMjM0Mzc1IEMgMjEuNjg3NSAtNC44MjgxMjUgMTguNzY1NjI1IC03LjczNDM3NSAxNS4xNzE4NzUgLTcuNzM0Mzc1IFogTSAxNS4xNzE4NzUgLTcuNzM0Mzc1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTEiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDEyLjYyNSAwIEwgNy4yMDMxMjUgLTguNjU2MjUgTCAxMi4zNTkzNzUgLTE0LjMyODEyNSBMIDEwLjM3NSAtMTQuMzI4MTI1IEwgMy41NDY4NzUgLTYuODQzNzUgTCAzLjU0Njg3NSAtMTQuMzI4MTI1IEwgMS44MTI1IC0xNC4zMjgxMjUgTCAxLjgxMjUgMCBMIDMuNTQ2ODc1IDAgTCAzLjU0Njg3NSAtNC42NDA2MjUgTCA2LjA0Njg3NSAtNy4zOTA2MjUgTCAxMC43MDMxMjUgMCBaIE0gMTIuNjI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTIiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDMuMDYyNSAwIEwgMy4wNjI1IC04Ljg3NSBMIDEuNTMxMjUgLTguODc1IEwgMS41MzEyNSAwIFogTSAzLjE4NzUgLTExLjY1NjI1IEwgMy4xODc1IC0xMy4zOTA2MjUgTCAxLjQ1MzEyNSAtMTMuMzkwNjI1IEwgMS40NTMxMjUgLTExLjY1NjI1IFogTSAzLjE4NzUgLTExLjY1NjI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0zIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAxMy44NDM3NSAwIEwgMTMuODQzNzUgLTYuMDMxMjUgQyAxMy44NDM3NSAtNy40MjE4NzUgMTMuNDg0Mzc1IC05LjA0Njg3NSAxMS4xNzE4NzUgLTkuMDQ2ODc1IEMgOS42MjUgLTkuMDQ2ODc1IDguNzAzMTI1IC04LjA3ODEyNSA4LjI4MTI1IC03LjQ4NDM3NSBDIDcuOTA2MjUgLTguNTc4MTI1IDcuMDQ2ODc1IC05LjA0Njg3NSA1Ljc5Njg3NSAtOS4wNDY4NzUgQyA0LjQwNjI1IC05LjA0Njg3NSAzLjUxNTYyNSAtOC4yMzQzNzUgMy4wMzEyNSAtNy42NTYyNSBMIDMuMDMxMjUgLTguOTM3NSBMIDEuNTMxMjUgLTguOTM3NSBMIDEuNTMxMjUgMCBMIDMuMDkzNzUgMCBMIDMuMDkzNzUgLTUgQyAzLjA5Mzc1IC02LjIxODc1IDMuNTQ2ODc1IC03Ljc4MTI1IDUuMDE1NjI1IC03Ljc4MTI1IEMgNi45MDYyNSAtNy43ODEyNSA2LjkwNjI1IC02LjQ2ODc1IDYuOTA2MjUgLTUuODU5Mzc1IEwgNi45MDYyNSAwIEwgOC40Njg3NSAwIEwgOC40Njg3NSAtNSBDIDguNDY4NzUgLTYuMjE4NzUgOC45MjE4NzUgLTcuNzgxMjUgMTAuMzkwNjI1IC03Ljc4MTI1IEMgMTIuMjY1NjI1IC03Ljc4MTI1IDEyLjI2NTYyNSAtNi40Njg3NSAxMi4yNjU2MjUgLTUuODU5Mzc1IEwgMTIuMjY1NjI1IDAgWiBNIDEzLjg0Mzc1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTQiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDE1LjA2MjUgMCBMIDE1LjA2MjUgLTE0LjMyODEyNSBMIDEyLjY1NjI1IC0xNC4zMjgxMjUgTCAxMC4zMTI1IC03LjcwMzEyNSBMIDkuMzEyNSAtNC43OTY4NzUgQyA5LjE1NjI1IC00LjI1IDguNTkzNzUgLTIuNTc4MTI1IDguNDY4NzUgLTEuOTIxODc1IEwgOC40NTMxMjUgLTEuOTIxODc1IEMgOC4zOTA2MjUgLTIuMzI4MTI1IDguMjY1NjI1IC0yLjc2NTYyNSA3LjkzNzUgLTMuODI4MTI1IEwgNy4zMjgxMjUgLTUuNjU2MjUgTCA0LjI4MTI1IC0xNC4zMjgxMjUgTCAxLjg1OTM3NSAtMTQuMzI4MTI1IEwgMS44NTkzNzUgMCBMIDMuNDY4NzUgMCBMIDMuNDY4NzUgLTEyLjY1NjI1IEwgMy40ODQzNzUgLTEyLjY1NjI1IEMgMy40ODQzNzUgLTEyLjY1NjI1IDMuNjcxODc1IC0xMS43MzQzNzUgNC45Mzc1IC04LjEyNSBMIDcuNjU2MjUgLTAuMzI4MTI1IEwgOS4xODc1IC0wLjMyODEyNSBMIDExLjY1NjI1IC03LjI1IEwgMTIuNTYyNSAtOS45NTMxMjUgQyAxMi43NjU2MjUgLTEwLjU3ODEyNSAxMy4yODEyNSAtMTIuMTA5Mzc1IDEzLjQwNjI1IC0xMi43MDMxMjUgTCAxMy40MjE4NzUgLTEyLjcwMzEyNSBMIDEzLjQyMTg3NSAwIFogTSAxNS4wNjI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTUiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDkuMTA5Mzc1IDAgTCA1LjQ2ODc1IC01LjQ2ODc1IEwgOC42NzE4NzUgLTguODc1IEwgNi42ODc1IC04Ljg3NSBMIDMuMDc4MTI1IC01LjA0Njg3NSBMIDMuMDc4MTI1IC0xNC4zMjgxMjUgTCAxLjU0Njg3NSAtMTQuMzI4MTI1IEwgMS41NDY4NzUgMCBMIDMuMDYyNSAwIEwgMy4wNjI1IC0yLjg5MDYyNSBMIDQuNDM3NSAtNC4zNTkzNzUgTCA3LjM1OTM3NSAwIFogTSA5LjEwOTM3NSAwICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS02Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA3Ljk2ODc1IDAgTCA3Ljk2ODc1IC01Ljg0Mzc1IEMgNy45Njg3NSAtNy43ODEyNSA2LjU5Mzc1IC05LjEyNSA0LjczNDM3NSAtOS4xMjUgQyAzLjgyODEyNSAtOS4xMjUgMi44MjgxMjUgLTguOTY4NzUgMS42ODc1IC04LjI5Njg3NSBMIDEuODEyNSAtNi45Mzc1IEMgMi4zMjgxMjUgLTcuMzEyNSAzLjIxODc1IC03LjkwNjI1IDQuNzAzMTI1IC03LjkwNjI1IEMgNS43NjU2MjUgLTcuOTA2MjUgNi40MDYyNSAtNy4xMDkzNzUgNi40MDYyNSAtNS44MjgxMjUgTCA2LjQwNjI1IC01LjA0Njg3NSBDIDMuMDkzNzUgLTQuOTM3NSAxLjAzMTI1IC0zLjk4NDM3NSAxLjAzMTI1IC0yLjM1OTM3NSBDIDEuMDMxMjUgLTEuNTE1NjI1IDEuNTQ2ODc1IDAuMTcxODc1IDMuMjY1NjI1IDAuMTcxODc1IEMgMy41NzgxMjUgMC4xNzE4NzUgNS4yNSAwLjEyNSA2LjQzNzUgLTAuNzY1NjI1IEwgNi40Mzc1IDAgWiBNIDYuNDA2MjUgLTIuNzM0Mzc1IEMgNi40MDYyNSAtMi4zNTkzNzUgNi40MDYyNSAtMS44NTkzNzUgNS43ODEyNSAtMS40ODQzNzUgQyA1LjI1IC0xLjE0MDYyNSA0LjU2MjUgLTEuMDkzNzUgNC4yODEyNSAtMS4wOTM3NSBDIDMuMjUgLTEuMDkzNzUgMi41NDY4NzUgLTEuNjcxODc1IDIuNTQ2ODc1IC0yLjM5MDYyNSBDIDIuNTQ2ODc1IC0zLjg0Mzc1IDUuNzY1NjI1IC0zLjk4NDM3NSA2LjQwNjI1IC00IFogTSA2LjQwNjI1IC0yLjczNDM3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDEtNyI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMTIuNTE1NjI1IC0xMi45Mzc1IEwgMTIuNTE1NjI1IC0xNC4yODEyNSBMIDAuNzAzMTI1IC0xNC4yODEyNSBMIDAuNzAzMTI1IC0xMi45Mzc1IEwgMy4yODEyNSAtMTIuOTM3NSBDIDMuNTMxMjUgLTEyLjkzNzUgMy43ODEyNSAtMTIuOTUzMTI1IDQuMDMxMjUgLTEyLjk1MzEyNSBMIDUuNzUgLTEyLjk1MzEyNSBMIDUuNzUgMCBMIDcuNDg0Mzc1IDAgTCA3LjQ4NDM3NSAtMTIuOTUzMTI1IEwgOS4xODc1IC0xMi45NTMxMjUgQyA5LjQzNzUgLTEyLjk1MzEyNSA5LjY4NzUgLTEyLjkzNzUgOS45Mzc1IC0xMi45Mzc1IFogTSAxMi41MTU2MjUgLTEyLjkzNzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTgiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDkuMTI1IC00LjQyMTg3NSBDIDkuMTI1IC03LjA2MjUgNy4xNzE4NzUgLTkuMTI1IDQuODU5Mzc1IC05LjEyNSBDIDIuNDg0Mzc1IC05LjEyNSAwLjU2MjUgLTcgMC41NjI1IC00LjQyMTg3NSBDIDAuNTYyNSAtMS43OTY4NzUgMi41NDY4NzUgMC4xNzE4NzUgNC44MjgxMjUgMC4xNzE4NzUgQyA3LjE4NzUgMC4xNzE4NzUgOS4xMjUgLTEuODU5Mzc1IDkuMTI1IC00LjQyMTg3NSBaIE0gNy41NjI1IC00LjU3ODEyNSBDIDcuNTYyNSAtMi4yNSA2LjIxODc1IC0xLjEwOTM3NSA0LjgyODEyNSAtMS4xMDkzNzUgQyAzLjM5MDYyNSAtMS4xMDkzNzUgMi4xMjUgLTIuMzI4MTI1IDIuMTI1IC00LjU3ODEyNSBDIDIuMTI1IC02Ljk4NDM3NSAzLjU5Mzc1IC03Ljg0Mzc1IDQuODI4MTI1IC03Ljg0Mzc1IEMgNi4xNzE4NzUgLTcuODQzNzUgNy41NjI1IC02LjkwNjI1IDcuNTYyNSAtNC41NzgxMjUgWiBNIDcuNTYyNSAtNC41NzgxMjUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTkiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDguNDUzMTI1IDAgTCA4LjQ1MzEyNSAtNi4wMzEyNSBDIDguNDUzMTI1IC03LjMyODEyNSA4LjE0MDYyNSAtOS4wNDY4NzUgNS43OTY4NzUgLTkuMDQ2ODc1IEMgNC40ODQzNzUgLTkuMDQ2ODc1IDMuNjA5Mzc1IC04LjM1OTM3NSAzLjAzMTI1IC03LjY1NjI1IEwgMy4wMzEyNSAtOC45Mzc1IEwgMS41MzEyNSAtOC45Mzc1IEwgMS41MzEyNSAwIEwgMy4wOTM3NSAwIEwgMy4wOTM3NSAtNSBDIDMuMDkzNzUgLTYuMjk2ODc1IDMuNTkzNzUgLTcuNzgxMjUgNSAtNy43ODEyNSBDIDYuODEyNSAtNy43ODEyNSA2Ljg3NSAtNi41NjI1IDYuODc1IC01Ljg1OTM3NSBMIDYuODc1IDAgWiBNIDguNDUzMTI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgyLTAiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDEuMDE1NjI1IDAgTCA5LjMxMjUgMCBMIDkuMzEyNSAtMTIuMDE1NjI1IEwgMS4wMTU2MjUgLTEyLjAxNTYyNSBaIE0gMi4wMzEyNSAtMS4wMTU2MjUgTCAyLjAzMTI1IC0xMS4wMTU2MjUgTCA4LjI5Njg3NSAtMTEuMDE1NjI1IEwgOC4yOTY4NzUgLTEuMDE1NjI1IFogTSAyLjAzMTI1IC0xLjAxNTYyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDItMSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMTAuOTY4NzUgLTE4LjA3ODEyNSBMIDEuOTM3NSAtMTguMDc4MTI1IEMgMC44NzUgLTE4LjA3ODEyNSAwIC0xNy4yMDMxMjUgMCAtMTYuMTI1IEwgMCAwLjY0MDYyNSBDIDAgMS43MTg3NSAwLjg3NSAyLjU3ODEyNSAxLjkzNzUgMi41NzgxMjUgTCAxMC45Njg3NSAyLjU3ODEyNSBDIDEyLjA0Njg3NSAyLjU3ODEyNSAxMi45MDYyNSAxLjcxODc1IDEyLjkwNjI1IDAuNjQwNjI1IEwgMTIuOTA2MjUgLTE2LjEyNSBDIDEyLjkwNjI1IC0xNy4yMDMxMjUgMTIuMDQ2ODc1IC0xOC4wNzgxMjUgMTAuOTY4NzUgLTE4LjA3ODEyNSBaIE0gNi40Mzc1IDEuMjgxMjUgQyA1LjcxODc1IDEuMjgxMjUgNS4xNzE4NzUgMC43MTg3NSA1LjE3MTg3NSAwIEMgNS4xNzE4NzUgLTAuNzE4NzUgNS43MTg3NSAtMS4yODEyNSA2LjQzNzUgLTEuMjgxMjUgQyA3LjE3MTg3NSAtMS4yODEyNSA3Ljc1IC0wLjcxODc1IDcuNzUgMCBDIDcuNzUgMC43MTg3NSA3LjE3MTg3NSAxLjI4MTI1IDYuNDM3NSAxLjI4MTI1IFogTSAxMC45Njg3NSAtMy4wNjI1IEMgMTAuOTY4NzUgLTIuNzgxMjUgMTAuNzY1NjI1IC0yLjU3ODEyNSAxMC41IC0yLjU3ODEyNSBMIDIuNDIxODc1IC0yLjU3ODEyNSBDIDIuMTQwNjI1IC0yLjU3ODEyNSAxLjkzNzUgLTIuNzgxMjUgMS45Mzc1IC0zLjA2MjUgTCAxLjkzNzUgLTE1LjY1NjI1IEMgMS45Mzc1IC0xNS45MjE4NzUgMi4xNDA2MjUgLTE2LjEyNSAyLjQyMTg3NSAtMTYuMTI1IEwgMTAuNSAtMTYuMTI1IEMgMTAuNzY1NjI1IC0xNi4xMjUgMTAuOTY4NzUgLTE1LjkyMTg3NSAxMC45Njg3NSAtMTUuNjU2MjUgWiBNIDEwLjk2ODc1IC0zLjA2MjUgIi8+Cjwvc3ltYm9sPgo8L2c+CjxjbGlwUGF0aCBpZD0iY2xpcDEiPgogIDxwYXRoIGQ9Ik0gMSA4NSBMIDMyIDg1IEwgMzIgOTkuODEyNSBMIDEgOTkuODEyNSBaIE0gMSA4NSAiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwMiI+CiAgPHBhdGggZD0iTSA1NSA4NSBMIDkzIDg1IEwgOTMgOTkuODEyNSBMIDU1IDk5LjgxMjUgWiBNIDU1IDg1ICIvPgo8L2NsaXBQYXRoPgo8Y2xpcFBhdGggaWQ9ImNsaXAzIj4KICA8cGF0aCBkPSJNIDExMiA4NSBMIDEyNSA4NSBMIDEyNSA5OS44MTI1IEwgMTEyIDk5LjgxMjUgWiBNIDExMiA4NSAiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwNCI+CiAgPHBhdGggZD0iTSAxMjQgODYgTCAxNDcgODYgTCAxNDcgOTkuODEyNSBMIDEyNCA5OS44MTI1IFogTSAxMjQgODYgIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPGcgaWQ9InN1cmZhY2UxIj4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDUwJSw1MCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTEiIHg9IjUuODgyIiB5PSI3Ni4zMiIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMSkiIGNsaXAtcnVsZT0ibm9uemVybyI+CjxnIHN0eWxlPSJmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMSIgeD0iMCIgeT0iOTkuNjQ2Ii8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTIiIHg9IjEzLjQ1MTMwMSIgeT0iOTkuNjQ2Ii8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTMiIHg9IjE4LjA1OTA0MiIgeT0iOTkuNjQ2Ii8+CjwvZz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIgeD0iNjIuNTc1IiB5PSI3Ni4zMiIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMikiIGNsaXAtcnVsZT0ibm9uemVybyI+CjxnIHN0eWxlPSJmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNCIgeD0iNTMuMjUzIiB5PSI5OS42NDYiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMiIgeD0iNzAuMTk2MjY2IiB5PSI5OS42NDYiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNSIgeD0iNzQuODA0MDA4IiB5PSI5OS42NDYiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNiIgeD0iODQuMjY3NDQzIiB5PSI5OS42NDYiLz4KPC9nPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSw1MCUsNTAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0xIiB4PSIxMTkuMjY4IiB5PSI3Ni4zMiIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMykiIGNsaXAtcnVsZT0ibm9uemVybyI+CjxnIHN0eWxlPSJmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNyIgeD0iMTEyLjEzNiIgeT0iOTkuNTg0Ii8+CjwvZz4KPC9nPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDQpIiBjbGlwLXJ1bGU9Im5vbnplcm8iPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoNTAlLDUwJSw1MCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTgiIHg9IjEyMy43Njg5OTkiIHk9Ijk5LjU4NCIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS05IiB4PSIxMzMuNDgwMzgzIiB5PSI5OS41ODQiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMiIgeD0iMTQzLjQ4MTA0MyIgeT0iOTkuNTg0Ii8+CjwvZz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMTAwJSw1MCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTEiIHg9IjM4LjYxNiIgeT0iMTguMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMTAwJSw1MCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTEiIHg9IjEyMy42NTUiIHk9IjE4LjA4Ii8+CjwvZz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41OTQwNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2U6cmdiKDUwJSw1MCUsNTAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA2My4yODczMTIgMTMuMTkxOTY5IEwgNzcuNzg3MzEyIDQyLjE4MDI1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTM5Ljk2Nyw2Ny4wMjQpIi8+CjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNTAlLDUwJSw1MCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAzOS41MTE3MTkgMjEuNDU3MDMxIEwgMzQuMDkzNzUgMjUuNTE5NTMxIEwgMzcuODIwMzEyIDI0Ljg0Mzc1IEwgMzkuNTExNzE5IDI4LjIzMDQ2OSAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41OTQwNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2U6cmdiKDUwJSw1MCUsNTAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMDYuNzk1MTI1IDEzLjE5MTk2OSBMIDkyLjI5NTEyNSA0Mi4xODAyNSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0zOS45NjcsNjcuMDI0KSIvPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDUwJSw1MCUsNTAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gNTAuNjMyODEyIDIxLjQ1NzAzMSBMIDUwLjYzNjcxOSAyOC4yMzA0NjkgTCA1Mi4zMjgxMjUgMjQuODQzNzUgTCA1Ni4wNTA3ODEgMjUuNTE5NTMxICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoxLjU5NDA0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZTpyZ2IoNTAlLDUwJSw1MCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE3MC4wODAyODEgMTMuMTkxOTY5IEwgMTcwLjA4MDI4MSA0MS43Nzc5MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwtMzkuOTY3LDY3LjAyNCkiLz4KPHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDEzMC4xMTMyODEgMjEuNDU3MDMxIEwgMTI3LjA4NTkzOCAyNy41MTU2MjUgTCAxMzAuMTEzMjgxIDI1LjI0NjA5NCBMIDEzMy4xNDA2MjUgMjcuNTE1NjI1ICIvPgo8L2c+Cjwvc3ZnPgo=" /></p>
Kim und Mika teilen sich ein Smartphone. Toni hat ein eigenes. Alle
haben das gleiche Smartphone (Modell). Erstellen Sie drei Variablen
`kims_phone`, `mika_phone` und `tonis_phone` vom Typ `Smartphone` mit
folgenden Eigenschaften:
%% Cell type:code id:0005-974052ac659f7ee4376b4ce2e0be1b15ce3b5b830fde9dab61cb828c768 tags:
```
kims_phone == mikas_phone
```
%% Output
True
%% Cell type:code id:0006-a66f3d1cc6ac15ac81bd09cf37a00d27d9ee40b8fb0527e5e0e80e7dd56 tags:
```
kims_phone is mikas_phone
```
%% Output
True
%% Cell type:code id:0007-b9323774c2fec387aaa1c04f9552a8da468f56458a7092be2830834b18e tags:
```
kims_phone == tonis_phone
```
%% Output
True
%% Cell type:code id:0008-03947013f0fd10f0e3ae2dcf2acfebe75b18b3bd35fae874e766f41ff5a tags:
```
kims_phone is not tonis_phone
```
%% Output
True
%% Cell type:markdown id:0012-582bf914ed9c3e087c489945c7e0bdcf8aa7a0fc8c1c07709b0f98ff5c6 tags:
## Lösung
Die Vergleichsoperatoren `==` und `is` haben unterschiedliche
Funktionsweisen in Python.
- Der Operator `==` vergleicht den Wert der beiden Instanzen. Das
bedeutet, dass zwei Instanzen als gleich betrachtet werden, wenn
ihre Attribute den gleichen Wert haben.
- Der Operator `is` vergleicht die Identität der Objekte. Zwei
Instanzen sind nur dann identisch (`is` liefert `True`), wenn es
sich um dasselbe Objekt im Speicher handelt.
Anhand der Klasse `Smartphone` können wir dies verdeutlichen:
%% Cell type:code id:0013-443ac731c7a0525dac7652893c1ff3e0465f0989b5e4dfb6ba5ad7893f7 tags:
```
kims_phone = Smartphone('Pixel')
mikas_phone = kims_phone
tonis_phone = Smartphone('Pixel')
```
%% Cell type:markdown id:0014-8ba4a303f808d8734ba14a636da02cb6f6108978df835fc58a7d380c675 tags:
Kim, Mika und Toni haben alle das gleiche Smartphone (Vergleich der
Attribute `model` mit `==`):
%% Cell type:code id:0015-303a7a2394809d01e6609c38001ebdfd4f1e9f682278087cd6ed639a436 tags:
```
kims_phone == mikas_phone == tonis_phone
```
%% Output
True
%% Cell type:markdown id:0016-7773ab05b316f76f67dce7a240429ee5a87be114e996ff90f7fbe28afde tags:
Kim und Mika haben dasselbe Smartphone (Vergleich der Objekte mit `is`):
%% Cell type:code id:0017-a66f3d1cc6ac15ac81bd09cf37a00d27d9ee40b8fb0527e5e0e80e7dd56 tags:
```
kims_phone is mikas_phone
```
%% Output
True
%% Cell type:markdown id:0018-85e54df55b13eea78037f5de907d81b8ba6e335f0e4514ccbc5a3da4a92 tags:
Aber Toni hat ein eigenes Smartphone (Vergleich der Objekte mit
`is not`):
%% Cell type:code id:0019-03947013f0fd10f0e3ae2dcf2acfebe75b18b3bd35fae874e766f41ff5a tags:
```
kims_phone is not tonis_phone
```
%% Output
True
%% Cell type:markdown id:0001-84dad4d119684fc3e7dadaa844c7c44fa65743dac0121eef85a1995dcac tags:
# Smartphone
Gegeben sei eine Klasse `Smartphone` mit dem Attribut `model`.
%% Cell type:code id:0002-a1718e279341c1963428a563f37b85ec5b37ec21f0f07582c3fac30e3c5 tags:
```
class Smartphone:
def __init__(self, model):
self.model = model
# __eq__ wird bei a == b mit self=a und other=b aufgerufen
def __eq__(self, other):
return self.model == other.model
```
%% Cell type:markdown id:0004-fac61a1dac817d3f21af436c6156999707559468a10ebcb184c97e6179f tags:
<p><img
src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTQ4LjA4OHB0IiBoZWlnaHQ9Ijk5LjgxMXB0IiB2aWV3Qm94PSIwIDAgMTQ4LjA4OCA5OS44MTEiIHZlcnNpb249IjEuMSI+CjxkZWZzPgo8Zz4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAxLjIxODc1IDAgTCAxMS4xNzE4NzUgMCBMIDExLjE3MTg3NSAtMTQuNDIxODc1IEwgMS4yMTg3NSAtMTQuNDIxODc1IFogTSAyLjQyMTg3NSAtMS4yMTg3NSBMIDIuNDIxODc1IC0xMy4yMDMxMjUgTCA5Ljk2ODc1IC0xMy4yMDMxMjUgTCA5Ljk2ODc1IC0xLjIxODc1IFogTSAyLjQyMTg3NSAtMS4yMTg3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMTAuODU5Mzc1IC05LjI5Njg3NSBDIDE0LjI4MTI1IC05LjI5Njg3NSAxNy4wNDY4NzUgLTEyLjA2MjUgMTcuMDQ2ODc1IC0xNS40ODQzNzUgQyAxNy4wNDY4NzUgLTE4LjkwNjI1IDE0LjI4MTI1IC0yMS42ODc1IDEwLjg1OTM3NSAtMjEuNjg3NSBDIDcuNDM3NSAtMjEuNjg3NSA0LjY1NjI1IC0xOC45MDYyNSA0LjY1NjI1IC0xNS40ODQzNzUgQyA0LjY1NjI1IC0xMi4wNjI1IDcuNDM3NSAtOS4yOTY4NzUgMTAuODU5Mzc1IC05LjI5Njg3NSBaIE0gMTUuMTcxODc1IC03LjczNDM3NSBMIDE0LjM3NSAtNy43MzQzNzUgQyAxMy4zMTI1IC03LjIzNDM3NSAxMi4xMjUgLTYuOTY4NzUgMTAuODU5Mzc1IC02Ljk2ODc1IEMgOS41OTM3NSAtNi45Njg3NSA4LjQwNjI1IC03LjIzNDM3NSA3LjMxMjUgLTcuNzM0Mzc1IEwgNi41MTU2MjUgLTcuNzM0Mzc1IEMgMi45MjE4NzUgLTcuNzM0Mzc1IDAgLTQuODI4MTI1IDAgLTEuMjM0Mzc1IEwgMCAwLjc2NTYyNSBDIDAgMi4wNjI1IDEuMDQ2ODc1IDMuMDkzNzUgMi4zMjgxMjUgMy4wOTM3NSBMIDE5LjM1OTM3NSAzLjA5Mzc1IEMgMjAuNjQwNjI1IDMuMDkzNzUgMjEuNjg3NSAyLjA2MjUgMjEuNjg3NSAwLjc2NTYyNSBMIDIxLjY4NzUgLTEuMjM0Mzc1IEMgMjEuNjg3NSAtNC44MjgxMjUgMTguNzY1NjI1IC03LjczNDM3NSAxNS4xNzE4NzUgLTcuNzM0Mzc1IFogTSAxNS4xNzE4NzUgLTcuNzM0Mzc1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTEiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDEyLjYyNSAwIEwgNy4yMDMxMjUgLTguNjU2MjUgTCAxMi4zNTkzNzUgLTE0LjMyODEyNSBMIDEwLjM3NSAtMTQuMzI4MTI1IEwgMy41NDY4NzUgLTYuODQzNzUgTCAzLjU0Njg3NSAtMTQuMzI4MTI1IEwgMS44MTI1IC0xNC4zMjgxMjUgTCAxLjgxMjUgMCBMIDMuNTQ2ODc1IDAgTCAzLjU0Njg3NSAtNC42NDA2MjUgTCA2LjA0Njg3NSAtNy4zOTA2MjUgTCAxMC43MDMxMjUgMCBaIE0gMTIuNjI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTIiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDMuMDYyNSAwIEwgMy4wNjI1IC04Ljg3NSBMIDEuNTMxMjUgLTguODc1IEwgMS41MzEyNSAwIFogTSAzLjE4NzUgLTExLjY1NjI1IEwgMy4xODc1IC0xMy4zOTA2MjUgTCAxLjQ1MzEyNSAtMTMuMzkwNjI1IEwgMS40NTMxMjUgLTExLjY1NjI1IFogTSAzLjE4NzUgLTExLjY1NjI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0zIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAxMy44NDM3NSAwIEwgMTMuODQzNzUgLTYuMDMxMjUgQyAxMy44NDM3NSAtNy40MjE4NzUgMTMuNDg0Mzc1IC05LjA0Njg3NSAxMS4xNzE4NzUgLTkuMDQ2ODc1IEMgOS42MjUgLTkuMDQ2ODc1IDguNzAzMTI1IC04LjA3ODEyNSA4LjI4MTI1IC03LjQ4NDM3NSBDIDcuOTA2MjUgLTguNTc4MTI1IDcuMDQ2ODc1IC05LjA0Njg3NSA1Ljc5Njg3NSAtOS4wNDY4NzUgQyA0LjQwNjI1IC05LjA0Njg3NSAzLjUxNTYyNSAtOC4yMzQzNzUgMy4wMzEyNSAtNy42NTYyNSBMIDMuMDMxMjUgLTguOTM3NSBMIDEuNTMxMjUgLTguOTM3NSBMIDEuNTMxMjUgMCBMIDMuMDkzNzUgMCBMIDMuMDkzNzUgLTUgQyAzLjA5Mzc1IC02LjIxODc1IDMuNTQ2ODc1IC03Ljc4MTI1IDUuMDE1NjI1IC03Ljc4MTI1IEMgNi45MDYyNSAtNy43ODEyNSA2LjkwNjI1IC02LjQ2ODc1IDYuOTA2MjUgLTUuODU5Mzc1IEwgNi45MDYyNSAwIEwgOC40Njg3NSAwIEwgOC40Njg3NSAtNSBDIDguNDY4NzUgLTYuMjE4NzUgOC45MjE4NzUgLTcuNzgxMjUgMTAuMzkwNjI1IC03Ljc4MTI1IEMgMTIuMjY1NjI1IC03Ljc4MTI1IDEyLjI2NTYyNSAtNi40Njg3NSAxMi4yNjU2MjUgLTUuODU5Mzc1IEwgMTIuMjY1NjI1IDAgWiBNIDEzLjg0Mzc1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTQiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDE1LjA2MjUgMCBMIDE1LjA2MjUgLTE0LjMyODEyNSBMIDEyLjY1NjI1IC0xNC4zMjgxMjUgTCAxMC4zMTI1IC03LjcwMzEyNSBMIDkuMzEyNSAtNC43OTY4NzUgQyA5LjE1NjI1IC00LjI1IDguNTkzNzUgLTIuNTc4MTI1IDguNDY4NzUgLTEuOTIxODc1IEwgOC40NTMxMjUgLTEuOTIxODc1IEMgOC4zOTA2MjUgLTIuMzI4MTI1IDguMjY1NjI1IC0yLjc2NTYyNSA3LjkzNzUgLTMuODI4MTI1IEwgNy4zMjgxMjUgLTUuNjU2MjUgTCA0LjI4MTI1IC0xNC4zMjgxMjUgTCAxLjg1OTM3NSAtMTQuMzI4MTI1IEwgMS44NTkzNzUgMCBMIDMuNDY4NzUgMCBMIDMuNDY4NzUgLTEyLjY1NjI1IEwgMy40ODQzNzUgLTEyLjY1NjI1IEMgMy40ODQzNzUgLTEyLjY1NjI1IDMuNjcxODc1IC0xMS43MzQzNzUgNC45Mzc1IC04LjEyNSBMIDcuNjU2MjUgLTAuMzI4MTI1IEwgOS4xODc1IC0wLjMyODEyNSBMIDExLjY1NjI1IC03LjI1IEwgMTIuNTYyNSAtOS45NTMxMjUgQyAxMi43NjU2MjUgLTEwLjU3ODEyNSAxMy4yODEyNSAtMTIuMTA5Mzc1IDEzLjQwNjI1IC0xMi43MDMxMjUgTCAxMy40MjE4NzUgLTEyLjcwMzEyNSBMIDEzLjQyMTg3NSAwIFogTSAxNS4wNjI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTUiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDkuMTA5Mzc1IDAgTCA1LjQ2ODc1IC01LjQ2ODc1IEwgOC42NzE4NzUgLTguODc1IEwgNi42ODc1IC04Ljg3NSBMIDMuMDc4MTI1IC01LjA0Njg3NSBMIDMuMDc4MTI1IC0xNC4zMjgxMjUgTCAxLjU0Njg3NSAtMTQuMzI4MTI1IEwgMS41NDY4NzUgMCBMIDMuMDYyNSAwIEwgMy4wNjI1IC0yLjg5MDYyNSBMIDQuNDM3NSAtNC4zNTkzNzUgTCA3LjM1OTM3NSAwIFogTSA5LjEwOTM3NSAwICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS02Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA3Ljk2ODc1IDAgTCA3Ljk2ODc1IC01Ljg0Mzc1IEMgNy45Njg3NSAtNy43ODEyNSA2LjU5Mzc1IC05LjEyNSA0LjczNDM3NSAtOS4xMjUgQyAzLjgyODEyNSAtOS4xMjUgMi44MjgxMjUgLTguOTY4NzUgMS42ODc1IC04LjI5Njg3NSBMIDEuODEyNSAtNi45Mzc1IEMgMi4zMjgxMjUgLTcuMzEyNSAzLjIxODc1IC03LjkwNjI1IDQuNzAzMTI1IC03LjkwNjI1IEMgNS43NjU2MjUgLTcuOTA2MjUgNi40MDYyNSAtNy4xMDkzNzUgNi40MDYyNSAtNS44MjgxMjUgTCA2LjQwNjI1IC01LjA0Njg3NSBDIDMuMDkzNzUgLTQuOTM3NSAxLjAzMTI1IC0zLjk4NDM3NSAxLjAzMTI1IC0yLjM1OTM3NSBDIDEuMDMxMjUgLTEuNTE1NjI1IDEuNTQ2ODc1IDAuMTcxODc1IDMuMjY1NjI1IDAuMTcxODc1IEMgMy41NzgxMjUgMC4xNzE4NzUgNS4yNSAwLjEyNSA2LjQzNzUgLTAuNzY1NjI1IEwgNi40Mzc1IDAgWiBNIDYuNDA2MjUgLTIuNzM0Mzc1IEMgNi40MDYyNSAtMi4zNTkzNzUgNi40MDYyNSAtMS44NTkzNzUgNS43ODEyNSAtMS40ODQzNzUgQyA1LjI1IC0xLjE0MDYyNSA0LjU2MjUgLTEuMDkzNzUgNC4yODEyNSAtMS4wOTM3NSBDIDMuMjUgLTEuMDkzNzUgMi41NDY4NzUgLTEuNjcxODc1IDIuNTQ2ODc1IC0yLjM5MDYyNSBDIDIuNTQ2ODc1IC0zLjg0Mzc1IDUuNzY1NjI1IC0zLjk4NDM3NSA2LjQwNjI1IC00IFogTSA2LjQwNjI1IC0yLjczNDM3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDEtNyI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMTIuNTE1NjI1IC0xMi45Mzc1IEwgMTIuNTE1NjI1IC0xNC4yODEyNSBMIDAuNzAzMTI1IC0xNC4yODEyNSBMIDAuNzAzMTI1IC0xMi45Mzc1IEwgMy4yODEyNSAtMTIuOTM3NSBDIDMuNTMxMjUgLTEyLjkzNzUgMy43ODEyNSAtMTIuOTUzMTI1IDQuMDMxMjUgLTEyLjk1MzEyNSBMIDUuNzUgLTEyLjk1MzEyNSBMIDUuNzUgMCBMIDcuNDg0Mzc1IDAgTCA3LjQ4NDM3NSAtMTIuOTUzMTI1IEwgOS4xODc1IC0xMi45NTMxMjUgQyA5LjQzNzUgLTEyLjk1MzEyNSA5LjY4NzUgLTEyLjkzNzUgOS45Mzc1IC0xMi45Mzc1IFogTSAxMi41MTU2MjUgLTEyLjkzNzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTgiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDkuMTI1IC00LjQyMTg3NSBDIDkuMTI1IC03LjA2MjUgNy4xNzE4NzUgLTkuMTI1IDQuODU5Mzc1IC05LjEyNSBDIDIuNDg0Mzc1IC05LjEyNSAwLjU2MjUgLTcgMC41NjI1IC00LjQyMTg3NSBDIDAuNTYyNSAtMS43OTY4NzUgMi41NDY4NzUgMC4xNzE4NzUgNC44MjgxMjUgMC4xNzE4NzUgQyA3LjE4NzUgMC4xNzE4NzUgOS4xMjUgLTEuODU5Mzc1IDkuMTI1IC00LjQyMTg3NSBaIE0gNy41NjI1IC00LjU3ODEyNSBDIDcuNTYyNSAtMi4yNSA2LjIxODc1IC0xLjEwOTM3NSA0LjgyODEyNSAtMS4xMDkzNzUgQyAzLjM5MDYyNSAtMS4xMDkzNzUgMi4xMjUgLTIuMzI4MTI1IDIuMTI1IC00LjU3ODEyNSBDIDIuMTI1IC02Ljk4NDM3NSAzLjU5Mzc1IC03Ljg0Mzc1IDQuODI4MTI1IC03Ljg0Mzc1IEMgNi4xNzE4NzUgLTcuODQzNzUgNy41NjI1IC02LjkwNjI1IDcuNTYyNSAtNC41NzgxMjUgWiBNIDcuNTYyNSAtNC41NzgxMjUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTkiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDguNDUzMTI1IDAgTCA4LjQ1MzEyNSAtNi4wMzEyNSBDIDguNDUzMTI1IC03LjMyODEyNSA4LjE0MDYyNSAtOS4wNDY4NzUgNS43OTY4NzUgLTkuMDQ2ODc1IEMgNC40ODQzNzUgLTkuMDQ2ODc1IDMuNjA5Mzc1IC04LjM1OTM3NSAzLjAzMTI1IC03LjY1NjI1IEwgMy4wMzEyNSAtOC45Mzc1IEwgMS41MzEyNSAtOC45Mzc1IEwgMS41MzEyNSAwIEwgMy4wOTM3NSAwIEwgMy4wOTM3NSAtNSBDIDMuMDkzNzUgLTYuMjk2ODc1IDMuNTkzNzUgLTcuNzgxMjUgNSAtNy43ODEyNSBDIDYuODEyNSAtNy43ODEyNSA2Ljg3NSAtNi41NjI1IDYuODc1IC01Ljg1OTM3NSBMIDYuODc1IDAgWiBNIDguNDUzMTI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgyLTAiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDEuMDE1NjI1IDAgTCA5LjMxMjUgMCBMIDkuMzEyNSAtMTIuMDE1NjI1IEwgMS4wMTU2MjUgLTEyLjAxNTYyNSBaIE0gMi4wMzEyNSAtMS4wMTU2MjUgTCAyLjAzMTI1IC0xMS4wMTU2MjUgTCA4LjI5Njg3NSAtMTEuMDE1NjI1IEwgOC4yOTY4NzUgLTEuMDE1NjI1IFogTSAyLjAzMTI1IC0xLjAxNTYyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDItMSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMTAuOTY4NzUgLTE4LjA3ODEyNSBMIDEuOTM3NSAtMTguMDc4MTI1IEMgMC44NzUgLTE4LjA3ODEyNSAwIC0xNy4yMDMxMjUgMCAtMTYuMTI1IEwgMCAwLjY0MDYyNSBDIDAgMS43MTg3NSAwLjg3NSAyLjU3ODEyNSAxLjkzNzUgMi41NzgxMjUgTCAxMC45Njg3NSAyLjU3ODEyNSBDIDEyLjA0Njg3NSAyLjU3ODEyNSAxMi45MDYyNSAxLjcxODc1IDEyLjkwNjI1IDAuNjQwNjI1IEwgMTIuOTA2MjUgLTE2LjEyNSBDIDEyLjkwNjI1IC0xNy4yMDMxMjUgMTIuMDQ2ODc1IC0xOC4wNzgxMjUgMTAuOTY4NzUgLTE4LjA3ODEyNSBaIE0gNi40Mzc1IDEuMjgxMjUgQyA1LjcxODc1IDEuMjgxMjUgNS4xNzE4NzUgMC43MTg3NSA1LjE3MTg3NSAwIEMgNS4xNzE4NzUgLTAuNzE4NzUgNS43MTg3NSAtMS4yODEyNSA2LjQzNzUgLTEuMjgxMjUgQyA3LjE3MTg3NSAtMS4yODEyNSA3Ljc1IC0wLjcxODc1IDcuNzUgMCBDIDcuNzUgMC43MTg3NSA3LjE3MTg3NSAxLjI4MTI1IDYuNDM3NSAxLjI4MTI1IFogTSAxMC45Njg3NSAtMy4wNjI1IEMgMTAuOTY4NzUgLTIuNzgxMjUgMTAuNzY1NjI1IC0yLjU3ODEyNSAxMC41IC0yLjU3ODEyNSBMIDIuNDIxODc1IC0yLjU3ODEyNSBDIDIuMTQwNjI1IC0yLjU3ODEyNSAxLjkzNzUgLTIuNzgxMjUgMS45Mzc1IC0zLjA2MjUgTCAxLjkzNzUgLTE1LjY1NjI1IEMgMS45Mzc1IC0xNS45MjE4NzUgMi4xNDA2MjUgLTE2LjEyNSAyLjQyMTg3NSAtMTYuMTI1IEwgMTAuNSAtMTYuMTI1IEMgMTAuNzY1NjI1IC0xNi4xMjUgMTAuOTY4NzUgLTE1LjkyMTg3NSAxMC45Njg3NSAtMTUuNjU2MjUgWiBNIDEwLjk2ODc1IC0zLjA2MjUgIi8+Cjwvc3ltYm9sPgo8L2c+CjxjbGlwUGF0aCBpZD0iY2xpcDEiPgogIDxwYXRoIGQ9Ik0gMSA4NSBMIDMyIDg1IEwgMzIgOTkuODEyNSBMIDEgOTkuODEyNSBaIE0gMSA4NSAiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwMiI+CiAgPHBhdGggZD0iTSA1NSA4NSBMIDkzIDg1IEwgOTMgOTkuODEyNSBMIDU1IDk5LjgxMjUgWiBNIDU1IDg1ICIvPgo8L2NsaXBQYXRoPgo8Y2xpcFBhdGggaWQ9ImNsaXAzIj4KICA8cGF0aCBkPSJNIDExMiA4NSBMIDEyNSA4NSBMIDEyNSA5OS44MTI1IEwgMTEyIDk5LjgxMjUgWiBNIDExMiA4NSAiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwNCI+CiAgPHBhdGggZD0iTSAxMjQgODYgTCAxNDcgODYgTCAxNDcgOTkuODEyNSBMIDEyNCA5OS44MTI1IFogTSAxMjQgODYgIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPGcgaWQ9InN1cmZhY2UxIj4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDUwJSw1MCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTEiIHg9IjUuODgyIiB5PSI3Ni4zMiIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMSkiIGNsaXAtcnVsZT0ibm9uemVybyI+CjxnIHN0eWxlPSJmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMSIgeD0iMCIgeT0iOTkuNjQ2Ii8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTIiIHg9IjEzLjQ1MTMwMSIgeT0iOTkuNjQ2Ii8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTMiIHg9IjE4LjA1OTA0MiIgeT0iOTkuNjQ2Ii8+CjwvZz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIgeD0iNjIuNTc1IiB5PSI3Ni4zMiIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMikiIGNsaXAtcnVsZT0ibm9uemVybyI+CjxnIHN0eWxlPSJmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNCIgeD0iNTMuMjUzIiB5PSI5OS42NDYiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMiIgeD0iNzAuMTk2MjY2IiB5PSI5OS42NDYiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNSIgeD0iNzQuODA0MDA4IiB5PSI5OS42NDYiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNiIgeD0iODQuMjY3NDQzIiB5PSI5OS42NDYiLz4KPC9nPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSw1MCUsNTAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0xIiB4PSIxMTkuMjY4IiB5PSI3Ni4zMiIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMykiIGNsaXAtcnVsZT0ibm9uemVybyI+CjxnIHN0eWxlPSJmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNyIgeD0iMTEyLjEzNiIgeT0iOTkuNTg0Ii8+CjwvZz4KPC9nPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDQpIiBjbGlwLXJ1bGU9Im5vbnplcm8iPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoNTAlLDUwJSw1MCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTgiIHg9IjEyMy43Njg5OTkiIHk9Ijk5LjU4NCIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS05IiB4PSIxMzMuNDgwMzgzIiB5PSI5OS41ODQiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMiIgeD0iMTQzLjQ4MTA0MyIgeT0iOTkuNTg0Ii8+CjwvZz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMTAwJSw1MCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTEiIHg9IjM4LjYxNiIgeT0iMTguMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMTAwJSw1MCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTEiIHg9IjEyMy42NTUiIHk9IjE4LjA4Ii8+CjwvZz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41OTQwNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2U6cmdiKDUwJSw1MCUsNTAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA2My4yODczMTIgMTMuMTkxOTY5IEwgNzcuNzg3MzEyIDQyLjE4MDI1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTM5Ljk2Nyw2Ny4wMjQpIi8+CjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNTAlLDUwJSw1MCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAzOS41MTE3MTkgMjEuNDU3MDMxIEwgMzQuMDkzNzUgMjUuNTE5NTMxIEwgMzcuODIwMzEyIDI0Ljg0Mzc1IEwgMzkuNTExNzE5IDI4LjIzMDQ2OSAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41OTQwNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2U6cmdiKDUwJSw1MCUsNTAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMDYuNzk1MTI1IDEzLjE5MTk2OSBMIDkyLjI5NTEyNSA0Mi4xODAyNSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0zOS45NjcsNjcuMDI0KSIvPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDUwJSw1MCUsNTAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gNTAuNjMyODEyIDIxLjQ1NzAzMSBMIDUwLjYzNjcxOSAyOC4yMzA0NjkgTCA1Mi4zMjgxMjUgMjQuODQzNzUgTCA1Ni4wNTA3ODEgMjUuNTE5NTMxICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoxLjU5NDA0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZTpyZ2IoNTAlLDUwJSw1MCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE3MC4wODAyODEgMTMuMTkxOTY5IEwgMTcwLjA4MDI4MSA0MS43Nzc5MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwtMzkuOTY3LDY3LjAyNCkiLz4KPHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig1MCUsNTAlLDUwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDEzMC4xMTMyODEgMjEuNDU3MDMxIEwgMTI3LjA4NTkzOCAyNy41MTU2MjUgTCAxMzAuMTEzMjgxIDI1LjI0NjA5NCBMIDEzMy4xNDA2MjUgMjcuNTE1NjI1ICIvPgo8L2c+Cjwvc3ZnPgo=" /></p>
Kim und Mika teilen sich ein Smartphone. Toni hat ein eigenes. Alle
haben das gleiche Smartphone (Modell). Erstellen Sie drei Variablen
`kims_phone`, `mika_phone` und `tonis_phone` vom Typ `Smartphone` mit
folgenden Eigenschaften:
%% Cell type:code id:0005-974052ac659f7ee4376b4ce2e0be1b15ce3b5b830fde9dab61cb828c768 tags:
```
kims_phone == mikas_phone
```
%% Output
True
%% Cell type:code id:0006-a66f3d1cc6ac15ac81bd09cf37a00d27d9ee40b8fb0527e5e0e80e7dd56 tags:
```
kims_phone is mikas_phone
```
%% Output
True
%% Cell type:code id:0007-b9323774c2fec387aaa1c04f9552a8da468f56458a7092be2830834b18e tags:
```
kims_phone == tonis_phone
```
%% Output
True
%% Cell type:code id:0008-03947013f0fd10f0e3ae2dcf2acfebe75b18b3bd35fae874e766f41ff5a tags:
```
kims_phone is not tonis_phone
```
%% Output
True
%% Cell type:markdown id:0001-d271d60ff2a6086114e6075c3c09b6b4a4d3b33662b15c9380be449e8d0 tags:
# Studenten Inplace
Es gibt Studentendaten (Name und Punkte) zu einem Kurs, der als Liste
repräsentiert wird:
%% Cell type:code id:0002-3b52fe0e288786a45b7d913f0e14fb2803f9e5db521d16a4fcb15e0e491 tags:
```
class Student:
def __init__(self, name, points):
self.name = name
self.points = points
course = [
Student('Kim', 15),
Student('Toni', 12),
Student('Mika', 5),
]
```
%% Cell type:markdown id:0006-332b309684465bda65f6c123aa70efea4b165fcf369a7df98045f8a85e6 tags:
Schreiben Sie eine Funktion `anonymize`, die eine Liste von Studenten
erhält und die Namen der Studenten auf `None` setzt. Es gibt noch einen
zweiten Parameter `inplace`, der standardmäßig auf `False` gesetzt ist.
- Falls `inplace=False`, soll sie die ursprünglichen Objekte nicht
ändern, sondern eine neue Liste zurückgeben.
- Falls `inplace=True`, soll sie die ursprünglichen Objekte ändern und
nichts zurückgeben.
## Lösung
Im Fall von `inplce=True` durchlaufen wir die Liste in einer
`for`-Schleife und setzen einfach die Namen auf `None`. Im Fall von
`inplace=False` erstellen wir einfach eine Liste mit `Student`-Objekten
mit den Originalpunkten aber `None` für den Namen.
%% Cell type:code id:0007-ed3b6fa0e6d5f5d1e3aab6a6ada86172d3bd2267804bb7ac9e37496b024 tags:
```
def anonymize(course, inplace=False):
if inplace:
for student in course:
student.name = None
else:
return [Student(None, student.points) for student in course]
```
%% Cell type:markdown id:0010-4977eeed7ca5fd880c44559a5a090eb47f402cc5f5c43dd85cee6254616 tags:
Ein bekanntes Beispiel für eine Methode, die ein Objekt modifiziert und
nichts zurück gibt, ist
[`sort`](https://docs.python.org/3/library/stdtypes.html#list.sort) des
Typs `list`, während die Funktion
[`sorted`](https://docs.python.org/3/library/functions.html#sorted) eine
neue Liste zurück gibt. Weiterhin hat `pandas` viele Funktionen mit
einem `inplace`-Parameter, wie z. B.
[`drop`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html).
## Tests
Zunächst testen wir den Fall `inplace=False`. Wir sehen, dass der erste
Name in der zurückgegebenen Liste `None` ist:
%% Cell type:code id:0011-3da0166feaf1d7044676e1a2eea0c2dae1c9eb8dc060d0ff79d909694a1 tags:
```
anon_course = anonymize(course)
anon_course[0].name is None
```
%% Output
True
%% Cell type:markdown id:0012-4d1d7688a4a2e7872facf4175ca58909aa76a4c67e6de1c489b87d90dd2 tags:
Und die Originalobjekte wurden (noch) nicht verändert:
%% Cell type:code id:0013-e0a60b3271e2ce0af5377c041f0ad92d1f181236f624770f07748ab75bd tags:
```
course[0].name == 'Kim'
```
%% Output
True
%% Cell type:markdown id:0014-2693f747e50ecf6b5fc1bd038562564dcfbeb90d7fb9091667b29da211a tags:
Mit `inplace=True` werden nun die Namen in den Originalobjekten auf
`None` gesetzt.
%% Cell type:code id:0015-dfc050a37713b50c0315af89c0831989e572a2a95427c8b916218a4d5e9 tags:
```
anonymize(course, inplace=True)
course[0].name is None
```
%% Output
True
%% Cell type:markdown id:0001-d271d60ff2a6086114e6075c3c09b6b4a4d3b33662b15c9380be449e8d0 tags:
# Studenten Inplace
Es gibt Studentendaten (Name und Punkte) zu einem Kurs, der als Liste
repräsentiert wird:
%% Cell type:code id:0002-3b52fe0e288786a45b7d913f0e14fb2803f9e5db521d16a4fcb15e0e491 tags:
```
class Student:
def __init__(self, name, points):
self.name = name
self.points = points
course = [
Student('Kim', 15),
Student('Toni', 12),
Student('Mika', 5),
]
```
%% Cell type:markdown id:0005-cd92af835c4c665dde68a6613139fcf7ff487da47c58381fc05f7728711 tags:
Schreiben Sie eine Funktion `anonymize`, die eine Liste von Studenten
erhält und die Namen der Studenten auf `None` setzt. Es gibt noch einen
zweiten Parameter `inplace`, der standardmäßig auf `False` gesetzt ist.
- Falls `inplace=False`, soll sie die ursprünglichen Objekte nicht
ändern, sondern eine neue Liste zurückgeben.
- Falls `inplace=True`, soll sie die ursprünglichen Objekte ändern und
nichts zurückgeben.
Hier ist der Startcode:
%% Cell type:code id:0006-39cfbdfd89281ca4756a7906dd832b019904e25203470e76098a063910c tags:
```
def anonymize(course, inplace=False):
pass
```
%% Cell type:markdown id:0008-60161c97d67948e2ec2dc6ea608b13d91a2d3a11371fdaf02aff67fb397 tags:
## Tests
Zunächst testen wir den Fall `inplace=False`. Wir sehen, dass der erste
Name in der zurückgegebenen Liste `None` ist:
%% Cell type:code id:0009-3da0166feaf1d7044676e1a2eea0c2dae1c9eb8dc060d0ff79d909694a1 tags:
```
anon_course = anonymize(course)
anon_course[0].name is None
```
%% Output
True
%% Cell type:markdown id:0010-4d1d7688a4a2e7872facf4175ca58909aa76a4c67e6de1c489b87d90dd2 tags:
Und die Originalobjekte wurden (noch) nicht verändert:
%% Cell type:code id:0011-e0a60b3271e2ce0af5377c041f0ad92d1f181236f624770f07748ab75bd tags:
```
course[0].name == 'Kim'
```
%% Output
True
%% Cell type:markdown id:0012-2693f747e50ecf6b5fc1bd038562564dcfbeb90d7fb9091667b29da211a tags:
Mit `inplace=True` werden nun die Namen in den Originalobjekten auf
`None` gesetzt.
%% Cell type:code id:0013-dfc050a37713b50c0315af89c0831989e572a2a95427c8b916218a4d5e9 tags:
```
anonymize(course, inplace=True)
course[0].name is None
```
%% Output
True
%% Cell type:markdown id:0001-1096b735dca43965e8fd69a1440108c21f58a606d7ed3564b0ce82a5891 tags:
# Kopien von Büchern
Schreibe zwei Funktionen `shallow_copy_books` und `deep_copy_books`, die
flache bzw. tiefe Kopien einer Liste von Büchern erstellt. Die Bücher
sind Instanzen der Klasse `Buch` mit den Attributen `title` (String) und
`authors` (Liste von Strings).
%% Cell type:code id:0002-89bedbad503289fdecfea05ad0180c1265e9cb0cbf7083421caf8c1fc8e tags:
```
class Book:
def __init__(self, title, authors):
self.title = title
self.authors = authors
book1 = Book("Harry Potter", ["J.K. Rowling"])
book2 = Book("Der Hobbit", ["J.R.R. Tolkien"])
original_books = [book1, book2] # << copy me
```
%% Cell type:markdown id:0004-85639f227e0d31d1de0efa291f32c5a37e32a2777cd7a3d055bdfb6ad31 tags:
## Lösung
Bei der flachen Kopie (`shallow_copy_books`) wird eine neue Liste
erstellt, die die gleichen Buchobjekte referenziert wie die
Originalliste. Änderungen an den Buchobjekten in der Kopie wirken sich
auch auf die Originalobjekte aus.
%% Cell type:code id:0005-f42206793260e071df16e0108d3a8796dcdc77e0b2ba4975aa14014e1d8 tags:
```
def shallow_copy_books(books):
"""
Erstellt eine flache Kopie der Liste von Büchern.
"""
return books.copy()
```
%% Cell type:markdown id:0006-5f28a2c990163c46258ec99c775ce8f79a40b90a95eb5c5b3580bb9feff tags:
Bei der tiefen Kopie (`deep_copy_books`) wird eine neue Liste erstellt,
und für jedes Buchobjekt in der Originalliste wird ein neues Buchobjekt
erstellt. Die Autorenliste jedes Buches wird ebenfalls kopiert, um eine
unabhängige Referenz herzustellen.
%% Cell type:code id:0007-e71e1c097ed50ef476003ffc4eaf644ac5b800481f572cd452aa66b9e0a tags:
```
def deep_copy_books(books):
"""
Erstellt eine tiefe Kopie der Liste von Büchern.
"""
return [Book(book.title, book.authors.copy()) for book in books]
```
%% Cell type:markdown id:0010-31af62a32b1a011120ec24e2c0f038039fce33996873e7107f237e7ea96 tags:
Anstatt einer List-Comprehension hätten wir auch `copy.deepcopy(books)`
aus dem [`copy`-Modul](https://docs.python.org/3/library/copy.html)
verwenden können.
## Test
Nun testen wir, ob die Buchobjekte bei der flachen Kopie dieselben sind.
Änderungen in der flachen Kopie sollten die Originalobjekte
beeinflussen:
%% Cell type:code id:0011-fdcf1df8c3eb65204657f67c18210ff26563172361104f249eabe5cf179 tags:
```
shallow_copy = shallow_copy_books(original_books)
shallow_copy[0].title = "Neues Buch"
print(original_books[0].title)
```
%% Output
Neues Buch
%% Cell type:markdown id:0012-1ffdaf3da853a9ee3b4bdb50d14500cc7f7f034ba3cc1d5555c44993ea3 tags:
Schließlich testen wir, ob die Buchobjekte (inkl. Autorenliste) bei der
tiefen Kopie voneinander unabhängig sind. Änderungen in der tiefen Kopie
sollten die Originalobjekte nicht beeinflussen:
%% Cell type:code id:0013-46716251c3c50bd3bc0f859f35f30e7956de5b8de591193a88a052649fa tags:
```
deep_copy = deep_copy_books(original_books)
deep_copy[1].title = "Anderes Buch"
deep_copy[1].authors += "Anderer Autor"
print(original_books[1].title, original_books[1].authors)
```
%% Output
Der Hobbit ['J.R.R. Tolkien']
%% Cell type:markdown id:0001-1096b735dca43965e8fd69a1440108c21f58a606d7ed3564b0ce82a5891 tags:
# Kopien von Büchern
Schreibe zwei Funktionen `shallow_copy_books` und `deep_copy_books`, die
flache bzw. tiefe Kopien einer Liste von Büchern erstellt. Die Bücher
sind Instanzen der Klasse `Buch` mit den Attributen `title` (String) und
`authors` (Liste von Strings).
%% Cell type:code id:0002-89bedbad503289fdecfea05ad0180c1265e9cb0cbf7083421caf8c1fc8e tags:
```
class Book:
def __init__(self, title, authors):
self.title = title
self.authors = authors
book1 = Book("Harry Potter", ["J.K. Rowling"])
book2 = Book("Der Hobbit", ["J.R.R. Tolkien"])
original_books = [book1, book2] # << copy me
```
%% Cell type:code id:0003-b21adcd7eaf51a7417a73867063fa61462216946d744bc4d5d5df959e94 tags:
```
def shallow_copy_books(books):
# TODO: Implementiere die shallow_copy_books Funktion hier
pass
def deep_copy_books(books):
# TODO: Implementiere die deep_copy_books Funktion hier
pass
```
%% Cell type:markdown id:0005-865ef6927c719fe90f7c5bade794cd66eccf00c727326fe0c480a07e5d2 tags:
## Test
Nun testen wir, ob die Buchobjekte bei der flachen Kopie dieselben sind.
Änderungen in der flachen Kopie sollten die Originalobjekte
beeinflussen:
%% Cell type:code id:0006-fdcf1df8c3eb65204657f67c18210ff26563172361104f249eabe5cf179 tags:
```
shallow_copy = shallow_copy_books(original_books)
shallow_copy[0].title = "Neues Buch"
print(original_books[0].title)
```
%% Output
Neues Buch
%% Cell type:markdown id:0007-1ffdaf3da853a9ee3b4bdb50d14500cc7f7f034ba3cc1d5555c44993ea3 tags:
Schließlich testen wir, ob die Buchobjekte (inkl. Autorenliste) bei der
tiefen Kopie voneinander unabhängig sind. Änderungen in der tiefen Kopie
sollten die Originalobjekte nicht beeinflussen:
%% Cell type:code id:0008-46716251c3c50bd3bc0f859f35f30e7956de5b8de591193a88a052649fa tags:
```
deep_copy = deep_copy_books(original_books)
deep_copy[1].title = "Anderes Buch"
deep_copy[1].authors += "Anderer Autor"
print(original_books[1].title, original_books[1].authors)
```
%% Output
Der Hobbit ['J.R.R. Tolkien']
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment