Мысли с тэгом python

12 сентября 2009. Потенциальный вклад

Создавая очередой проект на django, обратил внимание, что у меня есть несколько написанных мною модулей и отдельных классов, которые я реюзаю. Как закончу с текущим проектом, сделаю над собой усилие, организую нормально пакеты и, возможно, выложу для всеобщего пользования свой “мини-фреймворк” для приятного времепровождения с джангой =)

Комментировать [1] | , |

12 июня 2009. Шаблон декоратора для Eclipse

Заметил за собой, что стал часто пользоваться декораторами в Python. Набросал шаблон для создания декоратора в PyDev. Берите, если нужно:

def ${name}(func):   
   '''
	${description}
   '''
   if not hasattr(func, '__call__'):
           raise TypeError ('The argument should be a callable')
   def wrapper(request, *args, **kwargs):
       ${pass}
       return func(request, *args, **kwargs)
   return wrapper 

Комментировать [2] | |

12 мая 2009. Статические методы в Python

Для тех кто не знает, скажу, что в питоне есть статичные методы, так что можно не извращатьсяи не передавать в качестве аргумента self новые экземпляры класса :)

Чтобы сделать статический метод, нужно воспользоваться декоратором @staticmethod:

class SomeClass(object):
    @staticmethod
    def someStaticMethod():
        return "something"


Также доступны для создания классовые методы через декоратор @classmethod. Классовому методу передается ссылка на класс:

class SomeClass(object):
    CONSTANT = u"какая-то юникодная константа"
    @classmethod
    def someClassMethod(cls):
        return cls.CONSTANT


Оба декоратора доступны в стандартном пространстве имен – ничего импортировать не нужно.

Комментировать | |

31 декабря 2008. UnicodeDecodeError в Django

Всегда, всегда во всех стрингах с русскими буквами ставьте префикс “u” для того, чтобы конвертировать его в юникод. Даже если Вам кажется, что ошибка не может произрастать из этого, все равно проставьте.

У меня не сохранялись объекты через inline, прописанный к стандартному django.contrib.auth.User – после отсылки данных POST’ом вылезала ошибка UnicodeDecodeError от обработчика Django. Причем, если попытка сохранения велась не через этот inline, то все прекрасно сохранялось. Я уже хотел переопределить методы save() для всех моделей и вставить туда принудительную конвертацию в юникод, но отчего-то взял, да и поставил во всех стрингах префикс “u”:

<…>
hide = models.BooleanField(u“Спрятан”,default = False)
<…>

И произошло чудо. Объекты стали сохранятся из инлайнов!
Мистика.

P.S. С наступающим 2009-м годом! Желаю свершения всех желаний и минимального времяпровождения в дебаге ;)

Комментировать | , |

7 октября 2008. Питонья подножка: list в качестве аргумента по умолчанию

По долгу службы столкнулся с интересным явлением в Python (речь идет о версии 2.5, но подобное поведение сохраняют и младшие версии). В моем классе была явная ошибка и экземпляры класса как-то странно инициализировались. Я довольно много времени провел за дебаггингом, пока однозначно не решил, что виной всему ошибка в интерпретаторе. И был, как оказалось, по-своему прав…

Комментировать | , |

Copyright © Alexey "Datagreed" Strelkov, 2008 | Designed by Kevin Potts | Мое портфолио
Перепечатка материалов сайта без разрешения автора (Алексей Стрелков) запрещена.