Se tudo o que você deseja é qualquer dia do último mês, a coisa mais simples que você pode fazer é subtrair o número de dias da data atual, o que lhe dará o último dia do mês anterior.
Por exemplo, começando com qualquer data:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2016, 5, 24)
Subtraindo os dias da data atual, obtemos:
>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)
Isso é o suficiente para sua necessidade simplificada de qualquer dia do último mês.
Mas agora que você o tem, também pode obter qualquer dia do mês, incluindo o mesmo dia em que começou (ou seja, mais ou menos o mesmo que subtrair um mês):
>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)
Claro, você precisa ter cuidado com o 31º em um mês de 30 dias ou os dias que faltam a partir de fevereiro (e cuidar dos anos bissextos), mas isso também é fácil de fazer:
>>> a_date = datetime.date(2016, 3, 31)
>>> last_day_previous_month = a_date - datetime.timedelta(days=a_date.day)
>>> a_date_minus_month = (
... last_day_previous_month.replace(day=a_date.day)
... if a_date.day < last_day_previous_month.day
... else last_day_previous_month
... )
>>> a_date_minus_month
datetime.date(2016, 2, 29)
((date.month+delta-1) % 12)+1funciona e significa queif not m: m = 12pode ser removido