Grouping Functions by Using Classes in Python

后端 未结 3 1542
小蘑菇
小蘑菇 2021-02-01 16:14

I have been a Python Scientific Programmer for a few years now, and I find myself coming to a sort specific problem as my programs get larger and larger. I am self taught so I h

3条回答
  •  梦谈多话
    2021-02-01 16:58

    Another approach is to make a util package and split up your functions into different modules within that package. The basics of packages: make a directory (whose name will be the package name) and put a special file in it, the __init__.py file. This can contain code, but for the basic package organization, it can be an empty file.

    my_package/
      __init__.py
      module1.py/
      modle2.py/
      ...
      module3.py
    

    So say you are in your working directory:

    mkdir util
    touch util/__init__.py
    

    Then inside your util directory, make calc_funcs.py

    def add(a,b):
        return a + b
    
    def sub(a,b):
        return a -b
    

    And format_funcs.py:

    def cap(string):
        return string.title()
    
    def lower(string):
        return string.lower()
    

    And now, from your working directory, you can do things like the following:

    >>> from util import calc_funcs
    >>> calc_funcs.add(1,3)
    4
    >>> from util.format_funcs import cap
    >>> cap("the quick brown fox jumped over the lazy dog")
    'The Quick Brown Fox Jumped Over The Lazy Dog'
    

    Edited to add

    Notice, though, if we restart the interpreter session:

    >>> import util
    >>> util.format_funcs.cap("i should've been a book")
    Traceback (most recent call last):
      File "", line 1, in 
    AttributeError: module 'util' has no attribute 'format_funcs'
    

    This is what the __init__.py is for!

    In __init__.py, add the following:

    import util.calc_funcs, util.format_funcs
    

    Now, restart the interpreter again:

    >>> import util
    >>> util.calc_funcs.add('1','2')
    '12'
    >>> util.format_funcs.lower("I DON'T KNOW WHAT I'M YELLING ABOUT")
    "i don't know what i'm yelling about"
    

    Yay! We have flexible control over our namespaces with easy importing! Basically, the __init__.py plays an analogous role to the __init__ method in a class definition.

提交回复
热议问题