Python - почему я могу импортировать модули без __init__.py вообще?

Я новичок в Python и до сих пор не могу понять, зачем нам__init__.py файл для импорта модулей. Я прошел через другие вопросы и ответы, такие какэтот.

Что меня смущает, так это то, что я могу импортировать свои модулибез __init__py, такзачем мне это вообще нужно?

Мой пример,

index.py
   modules/
      hello/
          hello.py
          HelloWorld.py

index.py,

import os
import sys

root = os.path.dirname(__file__)
sys.path.append(root + "/modules/hello")

# IMPORTS MODULES
from hello import hello
from HelloWorld import HelloWorld

def application(environ, start_response):

    results = []

    results.append(hello())

    helloWorld = HelloWorld()
    results.append(helloWorld.sayHello())

    output = "<br/>".join(results)

    response_body = output

    status = '200 OK'

    response_headers = [('Content-Type', 'text/html'),
                       ('Content-Length', str(len(response_body)))]

    start_response(status, response_headers)

    return [response_body]

Модули / привет / hello.py,

def hello():
    return 'Hello World from hello.py!'

Модули / привет / HelloWorld.py,

# define a class
class HelloWorld:
    def __init__(self):
        self.message = 'Hello World from HelloWorld.py!'

    def sayHello(self):
        return self.message

Результат,

Hello World from hello.py!
Hello World from HelloWorld.py!

Что нужно, это только эти две строки,

root = os.path.dirname(__file__)
sys.path.append(root + "/modules/hello")

Без каких-либо__init__py, Может кто-нибудь объяснить, почему это работает таким образом?

Если__init__py правильно, что я должен делать / изменять в моем коде?

Ответы на вопрос(5)

Ваш ответ на вопрос