Професионална програма
Loading...
+ Нов въпрос
supersane avatar supersane 234 Точки

[Python OOP] Json and Yaml Loaders

Здравейте от лекцията снощи ни остана за вкъщи да си направим класове за зареждане на yaml и json формати.
Аз направих един базов клас Loader. И два наследника: JsonLoader, YamlLoader. От другия .py файл, който ползваме за входна точка преработих функцията за зареждане на данни от файл по този начин и работи, но снощи, когато правихме функцията за иницилиазиране на обект от някакъв тип фигура го правихме като ползваме речник и така избегнахме струпването на if-elif. Има ли вариант и с тези loader-и да се направи по същия начин. Примерно взима се файл екстеншъна проверява се в речника, където е зададен като ключ и ако го има, като стойност да седи класа на дадения loader и да се инстанцира. Дано съм задал правилно въпроса си, ето тук е това, което имам предвид за фигурите. 

Тагове:
0
Python
RoYaL avatar RoYaL Trainer 6847 Точки

Ами можеш, защо да не можеш? :) Просто премести стойностите на if/elif-овете като ключове на речника. А стойностите на тези ключове ще са съответните типове - JsonLoader и YamlLoader

LOADERS = {

     ".json": JsonLoader,

     ".yaml": YamlLoader

}

От там нататък е аналогично. LOADERS[extension] ;)

0
supersane avatar supersane 234 Точки

Да и аз така съм направил, но така мисля, че не ме инстанцира съответния loader и не мога да ползам метода му load. Ето направо скрийншот как го пробвам и грешката отдолу, ако може хвърли един поглед и кажи ако имаш идея :)

0
RoYaL avatar RoYaL Trainer 6847 Точки

Сигурен ли си, че си дефинирал речника, след като си дефинирал типовете?

Ето при мен работи:

http://pastebin.com/Twvb84Ta

 

0
supersane avatar supersane 234 Точки

Да, то като цяло те са ми в други файлове отделени, поогледах кода и се сетих, че метода като го подавам за използване не го подавам с скобки () след името и затова не се изпълнява. Сложих ги и си тръгна програмата, мерси :)

0