from typing import Callable

class BaseFunctor:
    """
    基础函数器类，提供数据处理的基本框架
    
    该类实现了数据处理的基本接口，包括数据推送、处理和回调机制。
    所有具体的功能实现类都应该继承这个基类。
    
    属性:
        _data (dict): 存储处理数据的字典
        _callback (Callable): 处理完成后的回调函数
        _model (dict): 存储模型相关的配置和实例
    """
    
    def __init__(self,
        data: dict or bytes = {},
        callback: Callable = None,
        model: dict = {},
    ):
        """
        初始化函数器
        
        参数:
            data (dict or bytes): 初始数据，可以是字典或字节数据
            callback (Callable): 处理完成后的回调函数
            model (dict): 模型相关的配置和实例
        """
        self._data: dict = {}
        self.push_data(data)
        self._callback: Callable = callback
        self._model: dict = model
        pass

    def __call__(self, data = None):
        """
        使类实例可调用，处理数据并触发回调
        
        参数:
            data: 要处理的数据，如果为None则处理已存储的数据
            
        返回:
            处理结果
        """
        # 如果传入数据，则压入数据
        if data is not None:
            self.push_data(data)
        # 处理数据
        result = self.process()
        # 如果回调函数存在，则触发回调
        if self._callback is not None and callable(self._callback):
            self._callback(result)
        return result

    def __add__(self, other):
        """
        重载加法运算符，用于合并数据
        
        参数:
            other: 要合并的数据
            
        返回:
            self: 返回当前实例，支持链式调用
        """
        self.push_data(other)
        return self

    def set_callback(self, callback: Callable):
        """
        设置回调函数
        
        参数:
            callback (Callable): 新的回调函数
        """
        self._callback = callback

    def set_model(self, model: dict):
        """
        设置模型配置
        
        参数:
            model (dict): 新的模型配置
        """
        self._model = model

    def push_data(self, data):
        """
        推送数据到处理器
        
        参数:
            data: 要处理的数据
        """
        pass
    
    def process(self):
        """
        处理数据的核心方法
        
        返回:
            处理结果
        """
        pass
