Why can't I run this test class?

Chris Rebert clp2 at rebertia.com
Fri Sep 11 03:43:56 EDT 2009


On Fri, Sep 11, 2009 at 12:40 AM, Kermit Mei <kermit.mei at gmail.com> wrote:
> On Fri, 2009-09-11 at 00:33 -0700, Chris Rebert wrote:
>> On Fri, Sep 11, 2009 at 12:30 AM, Kermit Mei <kermit.mei at gmail.com> wrote:
>> > Dear all,
>> >    I'm a newbie for python, and I write a program to test how to
>> > implement a class:
>> >
>> > #!/usr/bin/env
>> > python
>> >
>> > class Test:
>> >    'My Test class'
>> >    def __init__(self):
>> >        self.arg1 = 1
>> >
>> >    def first(self):
>> >        return self.arg1
>> >
>> > t1 = Test
>>
>> You missed the parentheses to call the constructor. That line should be:
>>
>> t1 = Test()
>>
>> Cheers,
>> Chris
>
>
> Yes, that can run. But If I put the following code into Test.py :
> #!/usr/bin/env python                                               |>>>
>                                                                    |
> class Test:                                                         |
>    'My Test class'                                                 |
>    def __init__(self):                                             |
>        self.arg1 = 1                                               |
>                                                                    |
>    def first(self):                                                |
>        return self.arg1                                            |
>                                                                    |
>    def setFirst(self,value = 5):                                   |
>        self.arg1 = value
>
> But when I want to run it as a module, something also be wrong:
>
> $ python
> Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
> [GCC 4.3.3] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import Test
>>>> t1 = Test()
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> TypeError: 'module' object is not callable

You've imported the module `Test`, whose name is determined by the
filename (Test.py).
To access the class of the same name (`Test`) that is defined in the
module, you need to use the dot operator:

>>>> import Test
>>>> t1 = Test.Test()

You should probably use different names for the module/file and the
class to avoid confusion.
Unlike Java, Python does not observe a direct correspondence between
filenames and classes.

Cheers,
Chris
--
http://blog.rebertia.com


More information about the Python-list mailing list