Informatika2-2013/Gyakorlat10

A MathWikiből
(Változatok közti eltérés)
52. sor: 52. sor:
 
print bar
 
print bar
 
</Python>
 
</Python>
 +
== Feladatok ==
 +
 +
=== 1. faladat ===
 +
* változtasd az osztály szintű változókat
 +
<python>
 +
>>> class A:
 +
...  pass
 +
...
 +
>>> A.v1 = 10
 +
>>> x=A() # létrehozok két példányt
 +
>>> y=A()
 +
>>> x.v1  # példányon belül is elérem az osztály szintű változót
 +
10
 +
>>> x.v1 = 34 # itt viszont létrehozok egy példány szintűt aminek a neve felülírja az osztály szintűt
 +
>>> y.v1
 +
10
 +
>>> x.v1
 +
34
 +
>>> A.v1
 +
10
 +
>>> A.v1 = 12 # itt az osztályszintű változót változtatjuk
 +
>>> x.v1 # mivel felülírtuk a v1-t az x példányban így ezen már nincs hatása
 +
34
 +
>>> y.v1
 +
12
 +
>>> A.v1
 +
12
 +
</python>
 +
 +
* példa dinamikus modosításra
 +
<python>
 +
>>> class A:
 +
...  pass
 +
...
 +
>>> def pow(obj):
 +
...  return obj.base ** obj.exp
 +
...
 +
>>>
 +
>>> x = A()
 +
>>> x.base, x.exp = 5,2
 +
>>> print pow(x)
 +
25
 +
</python>
 +
 +
=== 2. feladat ===

A lap 2013. április 16., 10:11-kori változata

Tartalomjegyzék

Osztályok

  • Az osztályok egységbe zárnak és a felesleges információt elrejtik.
  • Az osztályok metódusokat és változókat tartalmaznak. Metódusokat tekintsük osztályokon belüli függvényeknek.
  • Tekintsünk erre úgy, hogy a kód egy részét (mind tárolókat, mind a függvényeket nézve) összefogjuk.
  • Egy objektum egy osztály konkrét megvalósítása.

Egy metódust az alábbi módon definiálunk pythonban:

class Foo:
   def setx(self, x):
      self.x = x
   def bar(self):
      print self.x
  • Itt a lényeges dolog a self változó, ami mindig az első argumentuma a metódusnak. Ez mindig a konkrét megvalósított objektumot jelöli. Tehát külön értékadás nélkül self.x az osztályon (objektumon) belüli x változó, aminek az értékét állítjuk be a setx függvénnyel.
  • Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait:
f = Foo()
f.setx(5)
f.bar()
Foo.setx(f,5)
Foo.bar(f)
  • Fontos, hogy Pythonban futási időben is változhatnak az osztályhoz tartozó változók:
del f.x
  • Itt tehát magát a változót töröljük.
  • Minden egyes objektum mögött a háttérben létezik egy szótár, ami tartalmazza az osztály elemeit:
g = Foo()
vars(g)
g.__dict__
  • Konstruktornak hívjuk azt a metódust, ami az objektum létrehozásával együtt hívódik meg:
class Test:
    def __init__(self):
        print "Mostmar elhiszed?"
 
x = Test()
  • A destruktor konzisztens módon az objektum törlésével együtt hívódik meg:
class Bar:
    def __init__ (self, iamthis):
        self.iamthis = iamthis
    def __str__ (self):
        return self.iamthis
bar = Bar('apple')
print bar

Feladatok

1. faladat

  • változtasd az osztály szintű változókat
>>> class A:
...   pass
... 
>>> A.v1 = 10
>>> x=A() # létrehozok két példányt
>>> y=A()
>>> x.v1  # példányon belül is elérem az osztály szintű változót
10
>>> x.v1 = 34 # itt viszont létrehozok egy példány szintűt aminek a neve felülírja az osztály szintűt
>>> y.v1
10
>>> x.v1
34
>>> A.v1
10
>>> A.v1 = 12 # itt az osztályszintű változót változtatjuk
>>> x.v1 # mivel felülírtuk a v1-t az x példányban így ezen már nincs hatása
34
>>> y.v1
12
>>> A.v1
12
  • példa dinamikus modosításra
>>> class A:
...   pass
... 
>>> def pow(obj):
...   return obj.base ** obj.exp
... 
>>> 
>>> x = A()
>>> x.base, x.exp = 5,2
>>> print pow(x)
25

2. feladat

Személyes eszközök