from calendar import* doesn't import everything

Kiuhnm kiuhnm03.4t.yahoo.it
Tue Apr 24 20:26:18 EDT 2012


On 4/25/2012 1:54, Rotwang wrote:
> On 25/04/2012 00:42, Kiuhnm wrote:
>> On 4/25/2012 1:18, Rotwang wrote:
>>> Sorry if this is a stupid question, but what is up with this:
>>>
>>> >>> from calendar import*
>>> >>> Calendar
>>>
>>> Traceback (most recent call last):
>>> File "<pyshell#9>", line 1, in<module>
>>> Calendar
>>> NameError: name 'Calendar' is not defined
>>> >>> from calendar import Calendar
>>> >>> Calendar
>>> <class 'calendar.Calendar'>
>>>
>>> ?
>>
>> calendar.py defines __all__ this way:
>>
>> __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
>> "firstweekday", "isleap", "leapdays", "weekday", "monthrange",
>> "monthcalendar", "prmonth", "month", "prcal", "calendar",
>> "timegm", "month_name", "month_abbr", "day_name", "day_abbr"]
>>
>> Only those names are imported with '*'.
>>
>> Kiuhnm
>
> Oh, I didn't realise modules could do that. Thanks.
>
> Do you know what the rationale behind not including 'Calendar' is?

Let's see... at line 561 of calendar.py there's something suspicious:

--->
# Support for old module level interface
c = TextCalendar()

firstweekday = c.getfirstweekday

def setfirstweekday(firstweekday):
     try:
         firstweekday.__index__
     except AttributeError:
         raise IllegalWeekdayError(firstweekday)
     if not MONDAY <= firstweekday <= SUNDAY:
         raise IllegalWeekdayError(firstweekday)
     c.firstweekday = firstweekday

monthcalendar = c.monthdayscalendar
prweek = c.prweek
week = c.formatweek
weekheader = c.formatweekheader
prmonth = c.prmonth
month = c.formatmonth
calendar = c.formatyear
prcal = c.pryear
<---

So, it seems that "from calendar import *" is reserved for the "old 
interface" (i.e. non-OO).

Kiuhnm



More information about the Python-list mailing list