[小白Python学习错题集]类组合-AttributeError: ‘int‘ object has no attribute ‘get_range‘

class Car:
    """一次模拟汽车的简单尝试"""

    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 13

    def get_description_name(self):
        long_name = f"{self.year} {self.make} {self.model} "
        return long_name.title()

    def read_odometer(self):
        print(f"This car has {self.odometer_reading} miles on it.")

    def update_odometer(self, mileage):
        """禁止将里程表往回调"""
        if mileage >= self.odometer_reading:
            self.odometer_reading += mileage
        else:
            print("You can't roll back the odometer.")

    def increment_odometer(self, miles):
        self.odometer_reading += miles
class Battery:
    def __init__(self,battery_size=40):
        """初始化电池属性"""
        self.battery = battery_size

    def describe_battery(self):
        """打印一条描述电池容量的消息"""
        print(f"This car has a {self.battery} -kwh battery.")

    def get_range(self):
        if self.battery == 40:
            range = 150
        elif self.battery == 60:
            range = 220
        print(f"The car can go about {range} miles on a full charge.")

class ElectricCar(Car):
    """电动汽车的独特之处"""

    def __init__(self,make,model,year):
        """初始化父类的属性,再初始化电动汽车属性"""
        super().__init__(make,model,year)
        self.battery = Battery()


    def full_gas_tank(self):
        """电动汽车没有油箱"""
        print("\nThis car doesn't have a gas tank!")


my_leaf = ElectricCar('biyadi','suv',2022)
my_leaf.battery = 60
print(my_leaf.get_description_name())
#my_leaf.battery_size.describe_battery()

my_leaf.full_gas_tank()

my_leaf.battery.get_range()

报错提示:

C:\Users\c**\anaconda3\python.exe C:/Users/c**/PycharmProjects/untitled1/electric_car.py
Traceback (most recent call last):
  File "C:/Users/c**/PycharmProjects/untitled1/electric_car.py", line 63, in <module>
    my_leaf.battery.get_range()
AttributeError: 'int' object has no attribute 'get_range'

如果将一个变量作为参数传入函数,不要再函数外试图修改参数默认值,比如上面电池容量大小,不然会产生麻烦。

解决方案

在函数内部修改battery_size默认值

class Battery:
    def __init__(self,battery_size=40):
        """初始化电池属性"""
        self.battery = battery_size
        battery_size = 60

运行分析发现并未得到预期结果

修改下容量数值放置顺序

class Battery:
    def __init__(self,battery_size=40):
        """初始化电池属性"""
        battery_size = 60
        self.battery = battery_size

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值