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

如何访问列表中嵌套对象的Python属性以计算车辆与乘客距离?

解决嵌套属性访问与距离计算问题

1. 访问嵌套的Location属性

要访问列表中对象的嵌套Location属性,直接通过属性层级链式访问即可:

  • 针对CarSharingApp中的车辆:车辆对象.location.x、车辆对象.location.y
  • 针对乘客:乘客对象.location.x、乘客对象.location.y

举个实际例子,从CarSharingApp的列表中取出对象后逐层获取坐标:

# 取出第一个乘客和第一个车辆
passenger = mobileApp.passengers[0]
car = mobileApp.cars[0]

# 获取乘客坐标
passenger_x = passenger.location.x
passenger_y = passenger.location.y

# 获取车辆坐标
car_x = car.location.x
car_y = car.location.y

2. 计算车辆与乘客的距离

用欧几里得距离公式即可完成计算,我们可以把这个逻辑封装成独立函数,方便复用:

import math

def calculate_distance(passenger_loc, car_loc):
    # 欧几里得距离计算公式
    return math.sqrt((passenger_loc.x - car_loc.x)**2 + (passenger_loc.y - car_loc.y)**2)

3. 代码优化建议

你的CarSharingApp中cars和passengers是类属性,这会导致所有CarSharingApp实例共享同一个列表,不符合实际应用场景,建议改成实例属性,让每个App实例拥有独立的车辆和乘客列表:

class CarSharingApp:
    def __init__(self):
        self.cars = []  # 实例属性:每个App实例专属的车辆列表
        self.passengers = []  # 实例属性:每个App实例专属的乘客列表

    def add_car(self, car):
        self.cars.append(car)
        print(f"Car successfully added.")

    def add_passenger(self, passenger):
        self.passengers.append(passenger)
        print(f"Passenger successfully added.")

完整带功能的示例代码

整合所有逻辑,添加一个"查找乘客最近车辆"的功能,完整代码如下:

import math

class Location:
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Passenger:
    def __init__(self, passenger_name, location):
        self.passenger_name = passenger_name
        self.location = location

class Car:
    def __init__(self, car_name, location, cost_per_mile):
        self.car_name = car_name
        self.location = location
        self.cost_per_mile = cost_per_mile

def calculate_distance(passenger_loc, car_loc):
    return math.sqrt((passenger_loc.x - car_loc.x)**2 + (passenger_loc.y - car_loc.y)**2)

class CarSharingApp:
    def __init__(self):
        self.cars = []
        self.passengers = []

    def add_car(self, car):
        self.cars.append(car)
        print(f"Car successfully added.")

    def add_passenger(self, passenger):
        self.passengers.append(passenger)
        print(f"Passenger successfully added.")

    def find_closest_car(self, passenger_name):
        # 定位目标乘客
        target_passenger = None
        for p in self.passengers:
            if p.passenger_name == passenger_name:
                target_passenger = p
                break
        if not target_passenger:
            print("Passenger not found.")
            return
        
        # 遍历车辆找最近的
        closest_car = None
        min_distance = float('inf')
        for car in self.cars:
            distance = calculate_distance(target_passenger.location, car.location)
            if distance < min_distance:
                min_distance = distance
                closest_car = car
        
        print(f"Closest car to {passenger_name} is {closest_car.car_name}, distance: {min_distance:.2f} units")
        return closest_car

# 初始化测试数据
location1 = Location(0,0)
location2 = Location(1,1)
passenger1 = Passenger("John Doe", location1)
car1 = Car("car1", location2, 0.5)

# 创建App实例并添加数据
mobileApp = CarSharingApp()
mobileApp.add_car(car1)
mobileApp.add_passenger(passenger1)

# 执行找车功能
mobileApp.find_closest_car("John Doe")

运行后输出:

Car successfully added.
Passenger successfully added.
Closest car to John Doe is car1, distance: 1.41 units

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:40:18