Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Python Vincellér Zoltán.

Hasonló előadás


Az előadások a következő témára: "Python Vincellér Zoltán."— Előadás másolata:

1 Python Vincellér Zoltán

2 Emlékeztető: osztályok definiálása
A class kulcsszó használatával: osztály def osztály neve osztály szülő Attribútumok: adat metódus

3 Dokumentumok, mint adategységek
Ember-gép kapcsolat formanyomtatványok kitöltése minimálisan ellenőrizhető manuális Az internet korában gyakori lett a gép-gép interakció webes szolgáltatások (SOA, REST) szerver-szerver, szerver-kliens Szükséges olyan egységes adatkollekció, ami gép által könnyen interpretálható XML JSON

4 JSON JavaScript Object Notation
Egyszerű („lightweight”) adatcserére alkalmas formátum Önleíró Könnyen értelmezhető embernek és gépnek egyaránt Nyelvfüggetlen Szintaxis adatok tárolásához és cseréjéhez Szöveges formátum JavaScript objektumok jelölésrendszerével

5 JSON { "name": "John", "age": 35, "birthday": " ", "birthplace": "New York", "pets": [{ "name": "Bobby", "type": "dog" }, "name": "Fluffy", "type": "cat" } ]

6 JSON feladat Mindenki készítse el a saját JSON ”leírását”. Ez tartalmazza: vezetéknevét, keresztnevét (harmadik név nem kell), életkorát, lakhelyét (elég a város), egy tömbben a követlen szomszédait, ahol: egy szomszéd szintén objektumként szerepel, egyetlen adattagja van, az pedig a keresztneve Ezt a fájlt mentsétek el me.json-ként

7 JSON és Python A Python egyszerűvé teszi a JSON formátum használatát
Alapértelmezett, azaz előtelepített modul Használatához: import json Lehetővé teszi JSON szövegek feldolgozását akár fájlból, akár string-ből Képes Python kollekciókká alakítani Dictionary List

8 JSON → Python A JSON fájlok vagy szövegek feldolgozásával lehetőség nyílik a JSON-ben meghatározott objektumokat natív Python-os objektumokká alakítani A json modul képes Dictionary-be, vagy List-be olvasni load() metódus - JSON dokumentumot tartalmazó read()-et támogató fájl-szerű objektum loads() metódus - JSON dokumentumot tartalmazó str vagy unicode példány import json jsonData = '{"name": "Frank", "age": 39}' jsonToPython = json.loads(jsonData) Használjuk a printet ellenőrzéshez!

9 Python → JSON Lehetőség van Pythonos objektumokat is JSON formátumra hozni Ehhez a json csomag dumps() metódusát hívjuk segítségül import json pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True} dictionaryToJson = json.dumps(pythonDictionary) Ellenőrzéshez itt is használjunk printet!

10 Limitációk Fontos megjegyezni: a JSON nem képes az összes típus kezelésére tárolására, ami Pythonban is elérhető A következők támogatottak: List Dictionary Boolean Number Character None Minden egyéb típust konvertálni kell ahhoz, hogy JSON-ban tárolhassuk

11 Limitációk Tegyük fel, hogy van egy osztályunk:
class Employee(object):     def __init__(self, name):         self.name = name Mi történik, hogy ha ennek az osztálynak egy példányát JSON-né szeretnénk konvertálni? Hibaüzenetet kapunk Használható az objektum __dict__ attribútuma

12 Feladatok Töltsük be fájlból a me.json-t.
Ellenőrizzük a létrehozott objektum típusát Írjuk ki a konzolra az objektum tartalmát Írjuk ki a konzolra az objektum tartalmát, de most megfelelően indentálva (hint: használjuk a pprint függvényt) Alakítsuk a fent létrehozott Dictionary-t Python objektummá

13 Emlékeztető: Öröklődés
Hierarchiák Superclass (ősosztály) Subclass (származtatott osztály) Miért használjuk? Új információ Működések kiegészítése Működés felülírása

14 Emlékeztető: információ elfedés, getter, setter
Getter és setter metódusok az osztályok adat attribútumaiknak elérésére szolgálnak

15 Interfészek és absztrakt osztályok
Programtervezés során az első lépcső az objektumok kellően absztrakt definiálása Szeretnénk egy magasabb szinten úgy meghatározni egyes objektumok működését, hogy azokat konkrétan nem implementáljuk Lehetőséget ad a többszintű fejlesztéshez Nem feltétlenül ugyanaz fogja az implementálást elvégezni, mint aki tervezte az objektum működését

16 Interfészek és absztrakt osztályok
Az interfészek és absztrakt osztályok lehetőséget adnak a tervezési és fejlesztési folyamatok elkülönítésére Önmagában egyik sem példányosítható Sok magasabb szintű nyelv támogatja C#, JAVA, C++, stb.. Mi a különbség az absztrakt osztály és az interfész között? interfész: az implementálandó függvényeket és procedúrákat, illetve azok karakterisztikáját határozza meg, implementációt nem tartalmaz absztrakt osztály: az interfészhez hasonló, de konkrét implementációt és adatattribútumokat is tartalmazhat

17 Python és az absztrakt osztályok
Python-ban az öröklődés „lazán” van kezelve Vegyük a következő példát: class AbstractClass: def do_something(self): pass class B(AbstractClass): a = AbstractClass() b = B()

18 Python és az absztrakt osztályok
Ha az előző programot futtatjuk, hamar kiderül, hogy nem absztrakt osztályt hoztunk létre: eleve példányosítható már az AbstractClass is nincs a B származtatott osztályban do_something függvény implementálására kényszer A példaprogram egy szimpla öröklődést tartalmaz, nincs benne absztrakt osztály definiálva

19 Python Abstract Base Class
A Python külön moduljával lehetőség nyílik absztrakt osztályok definiálására Ez az úgynevezett Abstract Base Class, a csomag neve rövidítve abc Használatához import abc vagy specifikusan from abc import ABCMeta, abstractmethod Python 3.+ felett kényelmesebb a használata

20 Python ABC Az előző példát kiegészítve definiáljunk egy absztrakt osztályt: class AbstractClassExample(object): __metaclass__ = ABCMeta def __init__(self, value): self.value = value super(AbstractClassExample, self).__init__() @abstractmethod def do_something(self): pass

21 Python ABC Az absztrakt osztályból készítsünk egy subclass-t, do_something fv. implementálása nélkül: class DoAdd42(AbstractClassExample): pass x = DoAdd42(4) Futtatáskor TypeError hibát kapunk, az exception szövegéből kiderül az oka

22 Python ABC Előző kód javítása: class DoAdd42(AbstractClassExample):
def do_something(self): return self.value + 42 class DoMul42(AbstractClassExample): return self.value * 42 x = DoAdd42(10) y = DoMul42(10) print(x.do_something()) print(y.do_something())

23 Python ABC metódusai Egy absztrakt osztályból származtatott osztály addig nem példányosítható, amíg a definíciójában minden absztrakt metódus nincs implementálva Az ABC is tartalmazhat implementációt (???) A legelső származtatásnál felülíródik Mint minden öröklődésnél, itt is lehetséges az ősosztály metódusait meghívni super().do_something()

24 Python ABC metódusai from abc import ABCMeta, abstractmethod class AbstractClassExample(object): __metaclass__ = def do_something(self): print('SuperDoSomething') class AnotherSubclass(AbstractClassExample): super(AnotherSubclass, self).do_something() print("The enrichment from AnotherSubclass") x = AnotherSubclass() x.do_something()

25 Feladat Készítsünk egy absztrakt osztályt, amit a sokszögekhez tervezünk. Az alábbi absztrakt metódusok legyenek benne definiálva: Terület számítása Kerület számítása Oldalak lekérdezése A fenti absztrakt osztályt felhasználva készítsünk egy háromszög és egy négyzet osztályt, illetve a négyszögek származtatott osztályait (trapéz, paralelogramma, deltoid, stb). Implementáljuk a szükséges metódusokat.

26 Vége Köszönöm a figyelmet!


Letölteni ppt "Python Vincellér Zoltán."

Hasonló előadás


Google Hirdetések