[Tutor] Questions regarding class documentation ...
Lloyd Kvam
pythontutor at venix.com
Mon Jan 26 16:15:54 EST 2004
Isn't defaultdict a class?
Can you enter(?):
dd = defaultdict()
I expect type(dd) would then be an instance.
Also try doing:
type(C)
and
type(c)
hcohen2 wrote:
> Lloyd,
>
> Works fine as you described, thanks! Have any idea why I am not seeing
> seeing the instance typed properly?
>
> >>> import sampledict
> >>> dictIns = sampledict.defaultdict()
> >>> type(dictIns)
> <class 'sampledict.defaultdict'>
>
> What is the difference here, other than the simplicity of the class
> definition?
>
> >>> class C:
> ... print 'This is class C'
> ...
> This is class C
> >>> c = C()
> >>> type(c)
> <type 'instance'>
>
> Is this explained by metaclass programming: "... Any class whose
> instances are themselves classes, is a metaclass. When we talk about an
> instance that's not a class, the instance's metaclass is the class of
> its class ..."
>
> Not crystal clear to me yet, but I am beginning to think that many of
> the other times I have seen instances they were really derived from the
> old built-in types. That is, the instance is itself a simple number
> (could be complex) or string type object.
>
> Not sure I am really happy with this, but this may be route to my
> understanding this seeming discrepancy.
>
> Thanks,
> Herschel
>
>
> Lloyd Kvam wrote:
>
>> After importing a module, the "stuff" the module provides is referenced
>> from within the module's namespace.
>>
>> What you want is:
>>
>> import sampledict
>>
>> print sampledict.defaultdict
>>
>>
>> In general each python source file represents a separate namespace.
>>
>> hcohen2 wrote:
>>
>>> Sorry not sure what your is to address you by. However, your
>>> explanation does take care of why the straight import <file name> did
>>> not work. I used the from <file name> import <class name> and it did
>>> work. Nonetheless, having seen so much discussion on why one should
>>> not use from ... import ... I thought it odd this seemed necessary.
>>>
>>> I am, however, still bothered by my seeing an instance type()ed as a
>>> class and not an instance.
>>>
>>> Thanks,
>>> Herschel
>>>
>>> orbitz at ezabel.com wrote:
>>>
>>>> When you import a module, you tell python that you will be using
>>>> these symbols. On the 'import' statement, the symbols in your
>>>> module are not loaded into the global namespace. This is good,
>>>> since there is always the change of two modules having the same
>>>> class/function names in their namespace and you don't want them to
>>>> conflict. so when you do import sampledict, it loads the module but
>>>> all of the object it defines are located in the sampledict
>>>> namespace. If you were sure you wanted defaultdict to be imported
>>>> into the global namespace you could do:
>>>>
>>>> from sampledict import defaultdict.
>>>>
>>>> now your print defaultdict will work.
>>>>
>>>> I hope this helps.
>>>>
>>>>
>>>> On Mon, 26 Jan 2004 09:33:57 -0500
>>>> hcohen2 <hcohen2 at comcast.net> wrote:
>>>>
>>>>
>>>>
>>>>> Because the Core Python Programming book was so out of date
>>>>> regarding class and objects discussion I switched over to reading
>>>>> the Alan Gauld tutorial on the topic; afterward I directed my
>>>>> attention to the documentation on the python.org site.
>>>>>
>>>>> [ Here are some facts to keep in mind as you read the discussion
>>>>> below: documentation was for version 2.2.3 and I am using 2.2.2. I
>>>>> have so far reproduced the results exactly when I ran it
>>>>> interactively. I am trying to prepare myself to create
>>>>> applications independently, hence, I try to go beyond the text
>>>>> samples and use more general approaches.]
>>>>>
>>>>> Rather than running the code, in section: Subclassing built-in
>>>>> types, interactively I pasted the class definition in a file.
>>>>> Moreover, to keep it general I gave the file a name different from
>>>>> the class defined in the file, since I would expect I would have
>>>>> many unrelated class definitions within a single file that I would
>>>>> load to run a custom application.
>>>>>
>>>>> So within the python interpreter I imported the file containing the
>>>>> defaultdict class:
>>>>>
>>>>> >>>import sampledict # name sampledict.py
>>>>>
>>>>> however, when I attempted to run the sample code in the documentation:
>>>>>
>>>>> >>> print defaultdict
>>>>> ...
>>>>> NameError: name 'defaultdict' is not defined
>>>>>
>>>>> Running dir() shows, indeed, 'sampledict' is listed but not
>>>>> 'defaultdict, despite the importing of the file that contains the
>>>>> latter's definition.
>>>>>
>>>>> Perhaps what I did next was due to my having a tenuous grasp on
>>>>> this topic I remembered the problems with unbound method
>>>>> discussion. Hence, I tried to created an instance, but I got the
>>>>> same error. At that point I became suspicious of the success the
>>>>> importing command. Though I know it is bad style and a command to
>>>>> be avoided I gave the command:
>>>>>
>>>>> >>> from sampledict import defaultdict
>>>>> >>> print defaultdict
>>>>> <class 'sampledict.defaultdict'>
>>>>> >>> dictIns = defaultdict()
>>>>> >>> print dictIns
>>>>> {}
>>>>> >>> type(dictIns)
>>>>> <class 'sampledict.defaultdict'>
>>>>>
>>>>> Now the print dictIns 'works', but I have a number of questions!
>>>>>
>>>>> Again the interactive reproduction of the code works exactly as
>>>>> described (as far as I have gone). While I can reproduce the
>>>>> results, why doesn't the simple import command work for the file?
>>>>> What happened to seeing an instance rather than the type now being
>>>>> class for dictIns?
>>>>>
>>>>> Could someone enlighten me regarding these questions without citing
>>>>> further documentation that might just add to my confusion as to
>>>>> what may be happening. When I created instances previously that
>>>>> were identified as instances not as a class. [Regarding the last
>>>>> statement: on this machine with this version of Python.]
>>>>>
>>>>> It is very difficult to gain a firm grasp of this topic when the
>>>>> results are so haphazard and not internally consistent.
>>>>>
>>>>> I would like to thank anyone that can clarify why I have run into
>>>>> these difficulties.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Tutor maillist - Tutor at python.org
>>>>> http://mail.python.org/mailman/listinfo/tutor
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Tutor maillist - Tutor at python.org
>>>> http://mail.python.org/mailman/listinfo/tutor
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Tutor maillist - Tutor at python.org
>>> http://mail.python.org/mailman/listinfo/tutor
>>>
>>
>
>
>
--
Lloyd Kvam
Venix Corp.
1 Court Street, Suite 378
Lebanon, NH 03766-1358
voice: 603-653-8139
fax: 801-459-9582
More information about the Tutor
mailing list