Script nyelvek előadás - osztályok
Osztály definíció Megjegyzés: osztály függvény class MyClass: "Az elso osztaly." # dokumentációs string x = 20 # osztály változó def fv(self) : # osztály függvény return 42 MyClass.x == 20 MyClass.__doc__ == 'Az elso osztaly.' MyClass.y = 10 - MyClass.y == 10 Megjegyzés: osztály függvény MyClass.fv == <unbound method MyClass.fv> MyClass.fv() --- TypeError: unbound method fv() must be called with MyClass instance as first argument
Példányosítás Megjegyzés: osztály függvény mc.fv() --- MyClass.fv(mc) mc = MyClass() mc.x == 20 #osztály változó elérése mc.fv() == 42 Megjegyzés: osztály függvény mc.fv() --- MyClass.fv(mc) mc.y = 10 # példány szintű változó - mc.y == 10 mc.x = 30 # példány szintű változó - mc.x == 30 - MyClass.x == 20
Mutable osztály változó class MyClass2: x = [10] mc2 = MyClass2() mcc = MyClass2() mc2.x.append(20) - mc2.x == [10, 20] - MyClass2.x == [10, 20] - mcc.x == [10, 20] mc2.x = [10,20] # példány szintű változó mc2.x.append(30) - mc2.x == [10, 20, 30]
Példány szintű változó inicializálása class MyClass3: def __init__(self): self.x = [10] mc3 = MyClass3() mcc = MyClass3() mc3.x.append(20) - mc3.x == [10, 20] - mcc.x == [10] Megjegyzés: MyClass3.x --- AttributeError: class MyClass3 has no attribute 'x'
Paraméterátadás Megjegyzés: osztály függvény class MyClass4: def __init__(self, x, y): self.lista = [x,y] def append(self, x): self.lista.append(x) mc4 = MyClass4(10,20) - mc4.lista == [10,20] mc4.append(30) - mc4.lista == [10, 20,30] Megjegyzés: osztály függvény mc4.append(x) --- MyClass4.append(mc4,x)
Öröklődés - Többszörös öröklődés class Gyerek(Szülő1, Szülő2, ..., Szülőn): ... - Probléma: gyémánt kapcsolat - Öröklési sorrend - old style class vs. new style class - old style class: prioritás balról jobbra - new style class: MRO (method resolution order) A B C D
Old-style vs New-style class C(): "Old-style class" pass class D(object): "New-style class (default in Python 3)" x = C() - type(x) == <type 'instance'> - x.__class__ == <class __main__.C at ... > y = D() - type(y) == <class '__main__.D'> - y.__class__ == <class '__main__.D'>
Példaprogramok osztály1.py, ..., osztály6.py