Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python structure question
#1
I'm struggling with the overall structure of a python program. The following code works (as-is), but I'm not sure this is the way to let a main program function access class elements. If I move the class Test to a test.py file and then import that file it doesn't work so there must be a better way.

The import being used is: import test

What am I doing wrong?

class Test(object):
    def __init__ (self):
        pass
    class a(object):
        def __init__ (self):
            print("a")
    class b(object):
        def __init__ (self):
            print("b")

def    main():
    t = Test()
    t.a()
    t.b()
    print("Done")

if __name__=="__main__":
    main()
Reply
#2
(Dec-11-2016, 03:34 PM)PickyBiker Wrote: I'm struggling with the overall structure of a python program. The following code works (as-is), but I'm not sure this is the way to let a main program function access class elements. If I move the class Test to a test.py file and then import that file it doesn't work so there must be a better way.

The import being used is: import test

What am I doing wrong?
You still need to create an object like you did in main(). Also note that the content in your if  condition (calling main) if __name__ == '__main__' only runs when this scripts is ran directly, not imported. The creation of objects will normally be in the script you import this from, not inside the module itself.

test is the name of your class. If you name this file "my_module" you would import it as

import my_module
and then used as

my_object = my_module.test()
or import the class only

from my_module import test
and then used as

my_object = test()
see here for more info
http://python-forum.io/Thread-Basic-Modules-part-2
Recommended Tutorials:
Reply
#3
Ah, yes. Don't just import the module name, I have to reference the class as well.

In that case, just changing t = test() to t = test.test makes it work. But I also see your recommendation to change the file name also makes it less confusing.

I'm sure the python light will go on soon... right now it's just a dull glow for me.

Thank you.
Reply
#4
i actually use the class name as the module name too. However the standard name convention dictates that the class name would be capitalized and the module name not.

obj = test.Test()
You know right from the bat, that test is the module, and Test is the class just be naming convention. 

PEP 8
https://www.python.org/dev/peps/pep-0008/#class-names
Recommended Tutorials:
Reply
#5
Quote:The creation of objects will normally be in the script you import this from, not inside the module itself.

When I move   t = module.test   to the module file I changed it to   t = test      Then main() was changed to look like this:

import module

def    main():
    s = module.t
    s.a()
    s.b()
    print("done")
 
if __name__=="__main__":
    main()
Is that what you meant?
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  python project structure anne 1 1,749 Aug-01-2020, 07:17 PM
Last Post: deanhystad
  Nested Data structure question arjunfen 7 4,249 Feb-22-2019, 02:18 PM
Last Post: snippsat
  Call functions recursively in tree structure using python dubru 1 2,284 Feb-15-2019, 06:43 PM
Last Post: nilamo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020