You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

主文件调用DeliveryManager方法报错:缺少必选位置参数,求修复方案

问题及修复方案

错误原因

你遇到的错误来自两处逻辑矛盾:

  1. DeliveryManager类的__init__方法要求必须传入truck参数,但主文件中创建实例时delivery_manager = DeliveryManager()未传参,触发参数缺失报错。
  2. delivering_packages方法单独接收truck参数,但类实例本身已通过__init__绑定了self.truck,设计冗余且逻辑冲突。

结合你用同一个实例批量处理多辆卡车的场景,推荐以下修复方案:

修复方案一:调整为无状态工具类(适配多卡车批量处理)

让DeliveryManager不需要在初始化时绑定特定卡车,通过delivering_packages方法接收待处理卡车,更贴合你的业务需求。

修改后的DeliveryManager.py代码

class DeliveryManager:
    def __init__(self):
        # 无需绑定truck,改为无状态实例
        pass

    def __str__(self):
        return "DeliveryManager Instance"

    def delivering_packages(self, truck):
        not_delivered = [hash_table_package.lookup(packageID) for packageID in truck.packages]
        truck.packages.clear()
        current_address = extract_address(truck.address)

        while not_delivered:
            next_package = min(not_delivered, key=lambda package: distance_in_between(current_address, extract_address(package.address)))
            next_distance = distance_in_between(current_address, extract_address(next_package.address))
            truck.packages.append(next_package.ID)
            not_delivered.remove(next_package)
            truck.mileage += next_distance
            truck.address = next_package.address
            truck.time += datetime.timedelta(hours=next_distance / 18)
            next_package.delivery_time = truck.time
            next_package.departure_time = truck.depart_time
            current_address = extract_address(next_package.address)

主文件代码(初始化部分无需修改)

from DeliveryManager import DeliveryManager

delivery_manager = DeliveryManager()

def deliver_all_packages(trucks):
    for i, truck in enumerate(trucks[:-1]):
        delivery_manager.delivering_packages(truck)

    last_truck = trucks[-1]
    last_truck.depart_time = min(truck.time for truck in trucks[:-1])
    delivery_manager.delivering_packages(last_truck)

trucks = [truck1, truck2, truck3]
deliver_all_packages(trucks)

修复方案二:绑定单辆卡车(适合单卡车专属处理场景)

如果业务逻辑是每个DeliveryManager仅处理一辆卡车,可调整delivering_packages方法不再接收参数,直接使用实例绑定的self.truck:

修改后的DeliveryManager.py代码

class DeliveryManager:
    def __init__(self, truck):
        self.truck = truck

    def __str__(self):
        return str(self.truck)  # 修正:__str__必须返回字符串,原代码返回对象会报错

    def delivering_packages(self):
        truck = self.truck
        not_delivered = [hash_table_package.lookup(packageID) for packageID in truck.packages]
        truck.packages.clear()
        current_address = extract_address(truck.address)

        while not_delivered:
            next_package = min(not_delivered, key=lambda package: distance_in_between(current_address, extract_address(package.address)))
            next_distance = distance_in_between(current_address, extract_address(next_package.address))
            truck.packages.append(next_package.ID)
            not_delivered.remove(next_package)
            truck.mileage += next_distance
            truck.address = next_package.address
            truck.time += datetime.timedelta(hours=next_distance / 18)
            next_package.delivery_time = truck.time
            next_package.departure_time = truck.depart_time
            current_address = extract_address(next_package.address)

对应的主文件调用方式

from DeliveryManager import DeliveryManager

def deliver_all_packages(trucks):
    for i, truck in enumerate(trucks[:-1]):
        # 为每辆卡车创建专属DeliveryManager实例
        delivery_manager = DeliveryManager(truck)
        delivery_manager.delivering_packages()

    last_truck = trucks[-1]
    last_truck.depart_time = min(truck.time for truck in trucks[:-1])
    delivery_manager = DeliveryManager(last_truck)
    delivery_manager.delivering_packages()

trucks = [truck1, truck2, truck3]
deliver_all_packages(trucks)

额外注意点

  • 原__str__方法返回self.truck对象会导致打印报错,建议改为返回字符串类型。
  • 确保hash_table_package、extract_address、distance_in_between等外部函数已正确定义并导入。

内容的提问来源于stack exchange,提问作者coopertino7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:34:52