Package类定义正确性核查求助:代码问题排查与功能完善
Package类代码问题核查与修正
代码中的错误点:
- 导入错误:
from random import randintP是无效导入,代码中实际使用的是random.randrange,应改为import random或from random import randrange。 - 构造方法参数缺失:
__init__方法未接收length、width、height参数,直接赋值self.length = length会触发NameError,因为这些变量未定义。 - 实例变量与方法名冲突:实例变量
self.status和方法def status(self)重名,会导致方法覆盖实例变量,违背“包裹送达时调用方法”的需求,需修改其中一方的名称。 - 语法错误:
status方法中的print语句缺少闭合右括号,导致语法报错。 - set/get方法不完整:仅实现了
getVolume和getTracking,缺少weight、zip(建议改名避免内置函数冲突)、length/width/height等实例变量的set/get方法。 - volume计算逻辑缺陷:当前在
__init__中一次性计算volume,若后续修改长宽高,volume不会自动更新,应在getVolume中实时计算,或在set方法中同步更新。 - 追踪号格式问题:
randrange(0, 10000000)生成的数字可能不足7位,建议补前导零保证格式统一。 - 内置函数命名冲突:
self.zip使用了Python内置函数zip作为变量名,易引发混淆,建议改为self.destination_zip。
修正后的代码:
from datetime import date import random class Package(): # 构造方法:接收必要参数并初始化实例变量 def __init__(self, length, width, height): self.length = length self.width = width self.height = height self.weight = None self.destination_zip = None self._delivery_status = "Pending" # 改名避免与方法冲突 # 生成7位带前导零的追踪号 self.tracking = f"{random.randrange(0, 10000000):07d}" # 实时计算并返回体积 def getVolume(self): return self.length * self.width * self.height # 返回追踪号 def getTracking(self): return self.tracking # 包裹送达时调用的方法:更新状态并打印送达日期 def mark_delivered(self): self._delivery_status = "Delivered" print(f"Delivery Date: {date.today()}") # 返回追踪号与目的地邮编的字符串表示 def __str__(self): return f"Tracking #: {self.tracking}\nDestination: {self.destination_zip}" # 以下为各实例变量的set/get方法 def set_length(self, length): self.length = length def get_length(self): return self.length def set_width(self, width): self.width = width def get_width(self): return self.width def set_height(self, height): self.height = height def get_height(self): return self.height def set_weight(self, weight): self.weight = weight def get_weight(self): return self.weight def set_destination_zip(self, zip_code): self.destination_zip = zip_code def get_destination_zip(self): return self.destination_zip def get_delivery_status(self): return self._delivery_status
修正说明:
- 修复导入问题,使用
import random保证randrange可用。 - 构造方法添加
length、width、height参数,实例化时需传入这些必填属性。 - 实例变量
status改名为_delivery_status,方法名改为mark_delivered,明确其“标记送达”的功能,避免命名冲突。 - 补全
print语句的闭合括号,修复语法错误。 - 补充所有实例变量的set/get方法,满足需求。
- 修改
getVolume为实时计算体积,确保长宽高修改后体积值同步更新。 - 使用格式化字符串生成7位带前导零的追踪号,格式更规范。
- 将
zip变量改名为destination_zip,避免与内置函数冲突。
内容的提问来源于stack exchange,提问作者unreliablenarrator
相关产品推荐
相关产品推荐

