[Tutor] Questions regarding class documentation ...

hcohen2 hcohen2 at comcast.net
Mon Jan 26 15:58:18 EST 2004


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
>>
>





More information about the Tutor mailing list