Uniform Access Principle

Днес прочетох за нещо, наречено Meyer’s Uniform Access Principle. Това е един много интересен прицип касаещ ООП езиците. Гласи горе-долу следното:

Атрибутите на един обект трябва да се достъпват чрез нотация, която не позволява да се различи дали те са имплементирани чрез запис или чрез изчисление.

Иначе казано, line.length не трябва да издава дали става въпрос за поле или метод, изчисляващ разстоянието между двата края. Това е много хубава идея, понеже промотира любимите ми думички – абстракция и енкапсулация. Та, замислих се доколко това важи в езиците, които ползвам.

Continue reading

Куинче на Python

Наскоро си ходих по улицата и си спомних за едно предизвикателство от детството ми – да напиша програма, която принтира кода си. Не знам дали на вас ви се случва да ви хрумват такива неща, докато си ходите по улиците. Или да си спомняте такива предизвикателства от детството си. Аз обаче съм от този тип хора. Та, ето какво съчиних… Continue reading

питон-маратон

Днес приключихме летния семестър на Питона. След четири дена гърч, най-накрая мога да седна да си почина малко. Предвид, че още от уебтеха, Manowar-а, джулая и другия концерт тичам по задачи най-накрая ми се отдаде възможност да си разпусна. И да излея малко размисли за курса по Python… Continue reading

Nova Rock

Nova Rock представлява тридневен рок фестивал в Австрия, на около 60 км от Виена. Две седмици преди събитието случайно имах възможност да се сдобия с билети. Предвид обявените банди бе грехота да пропусна. Та, снабдих се с нещата от пърна необходимост – палатка, спален чувал и т.н., напазарувах малко дълготрайно хапване, купих няколко „ойрота“ и се метнах на самолетчето с още четирима човека, които едва познавах…

Continue reading

Себичен питон

Метакласовете в Python са много яко нещо. Макар все още да не ми се е наложило да напиша дори един такъв за работата си, са много полезен източник на забавления. Сега ще ви покажа как с малко остроумие може да дефинирате класове по следния интересен начин:

class Person(object):
    __metaclass__ = selfless
    def __init__(name, age):
        self.name = name
        self.age = age

    def __repr__():
        return "Person(%s, %d)" % (repr(self.name), self.age)

    def sayHi():
        print "Hello, I’m %s and I’m %d years old" % (self.name, self.age)

    def rename(newName):
        self.name = newName

Интересното? Въобще не ви се налага да пишете self пред имената на методите.

Continue reading

Динамичен питон

След като много хора от курса проявиха интерес колко точно динамичен е Python, реших да съставя малко примерче как „динамично“ (т.е. по време на изпълнение) може да си конструираме изцяло нов клас. Наслаждавайте се!

Continue reading

fizzbuzz.py

Ето как бих решил FizzBuzz проблема, в оригиналния му вариант, където дори принтираме, вместо да връщаме речник:

for n in range(1, 101):
    if n % 3 == 0 and n % 5 == 0:
        print ‘FizzBuzz’
    elif n % 3 == 0:
        print ‘Fizz’
    elif n % 5 == 0:
        print ‘Buzz’
    else:
        print n

Просто, нали? Но да мотивирам това решение:

Continue reading

Python @ FMI

От известно време не съм писал – разходката до Стокхолм бе бая тегава, особено след изпуснатия полет и преспиването във Варшава. А като се върнах бях залят от задачи, една от които бе курса по Python във ФМИ. И тъй като днес е „юбилейната“ четвърта лекция (сиреч две седмици), викам да драсна няколко реда по въпроса. Continue reading

Unit тестове #1

Може би това, което най-често ми се налага да обяснявам на приятели/колеги е какво представляват unit тестовете и защо за бога си усложняваме живота като ги пишем. Наистина, когато за първи път започнах да работя и големия лош TL ми каза да пиша „тестове за кода на проекта“, бая се оцъклих. Дълго време гледах тъпо JUnit апито и се чудих какво по дяволите се иска от мен да направя с него и по какъв начин това ще помогне на проекта. Но както казват, мъдростта идва с времето – след месец-два не просто му бях хванал цаката, но вече въобще не мога да си представя разработката на сериозно приложение от екип, без да се пишат тестове. И понеже това ми е любима тема, ще се опитам да драсна едно „цикълче“ от статийки, които да разясняват идеята – или поне как аз я разбирам.

Continue reading