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
运行结果: