__init__.py - это специальный файл, который определяет директорию как пакет Python. Он выполняется при импорте пакета.
# Пустой файл - просто отмечает директорию как пакет Python
# Самый простой случай использования
# genshin_tools/characters/__init__.py
# Импорты для удобства использования
from .base import Character
from .talents import TalentSystem
# Что доступно при импорте через *
__all__ = ['Character', 'TalentSystem']
# Теперь можно использовать так:
# from genshin_tools.characters import Character
# Вместо:
# from genshin_tools.characters.base import Character
# genshin_tools/__init__.py
"""
GenshinTools - пакет для расчётов в Genshin Impact
"""
# Метаданные пакета
__version__ = "0.1.0"
__author__ = "Your Name"
# Инициализация важных переменных
DEFAULT_CRIT_RATE = 5.0
DEFAULT_CRIT_DMG = 50.0
# Загрузка конфигурации при импорте
import json
from pathlib import Path
config_path = Path(__file__).parent / "config.json"
if config_path.exists():
with open(config_path) as f:
CONFIG = json.load(f)
else:
CONFIG = {"default_language": "ru"}
# genshin_tools/combat/__init__.py
# Собираем все функции расчёта урона в одном месте
from .normal import calculate_normal_attack
from .charged import calculate_charged_attack
from .plunge import calculate_plunge_attack
def calculate_all_damage(base_atk, talent_levels):
"""Рассчитывает все типы урона"""
return {
"normal": calculate_normal_attack(base_atk, talent_levels["normal"]),
"charged": calculate_charged_attack(base_atk, talent_levels["charged"]),
"plunge": calculate_plunge_attack(base_atk, talent_levels["plunge"])
}
# Экспортируем только нужные функции
__all__ = ['calculate_all_damage']
Создайте систему __init__.py файлов для пакета работы с артефактами:
Подсказка: Пример организации импортов:
# artifacts/__init__.py
from .sets import GladiatorSet, NoblesseSet
from .stats import calculate_stats
__all__ = ['GladiatorSet', 'NoblesseSet', 'calculate_stats']
# artifacts/sets/__init__.py
from .noblesse import NoblesseSet
from .gladiator import GladiatorSet
__all__ = ['NoblesseSet', 'GladiatorSet']