Лучше всего придерживаться 2.4 и иметь модуль time_machine со всеми вкусностями, которые есть у последующих питонов, которые вы хотите.Например, когда свойства впервые появились, вы должны были сделать что-то вроде:
def _get_prop(self):
return self._prop
def _set_prop(self, value):
self._prop = value
prop = property(_get_prop, _set_prop)
, но в 2.6 они улучшили свойства и стали самими декораторами, поэтому вы могли написать:
@property
def prop(self):
return self._prop
@prop.setter
def prop(self, value):
self._prop = value
что означает, что в пространстве имен вашего класса остается меньше избыточных функций.
Мне очень нравится эта функция, поэтому мой time_machine.py имеет код, подобный следующему:
# 2.6+ property for 2.5-
if sys.version_info[:2] < (2, 6):
# define our own property type
class property():
"2.6 properties for 2.5-"
def __init__(self, fget=None, fset=None, fdel=None, doc=None): ...
def __call__(self, func): ...
def __get__(self, obj, objtype=None): ...
def __set__(self, obj, value): ...
def __delete__(self, obj): ...
def setter(self, func): ...
def deleter(self, func): ...
ДействительноХорошая часть этого заключается в том, что эквиваленты Python часто используются для демонстрации новой функциональности, поэтому вам даже не нужно писать код самостоятельно.