class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=0
def get_descriptive_name(self):
"""返回简洁的描述性信息"""
long_name=str(self.year)+' '+self.make+' '+self.model
return long_name.title()
def update_odometer(self,mileage):
if mileage>=self.odometer_reading:
self.odometer_reading=mileage
else:print("you can't roll back an odometer!")
def read_odometer(self):
"""打印一条指出汽车里程的消息"""
print("This icar has "+str(self.odometer_reading)+" miles on it.")
def increent_odometer(self,miles):
self.odometer_reading+=miles
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self,battery_size=70):
"""初始化电瓶的属性"""
self.battery_size=battery_size
def describe_battery(self):
"""打印一条电瓶的信息"""
print("this car has a "+str(self.battery_size)+"-kwh battery.")
class ElectriCar(Car):
"""电动汽车的独特之处"""
def __init__(self,make,model,year):
"""初始化父类属性"""
super().__init__(make,model,year)
self.battery=Battery()
my_tesla=ElectriCar('tesla','model s',2016)
my_tesla.battery=Battery(30)
print(my_tesla.get_descriptive_name())
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=0
def get_descriptive_name(self):
"""返回简洁的描述性信息"""
long_name=str(self.year)+' '+self.make+' '+self.model
return long_name.title()
def update_odometer(self,mileage):
if mileage>=self.odometer_reading:
self.odometer_reading=mileage
else:print("you can't roll back an odometer!")
def read_odometer(self):
"""打印一条指出汽车里程的消息"""
print("This icar has "+str(self.odometer_reading)+" miles on it.")
def increent_odometer(self,miles):
self.odometer_reading+=miles
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self,battery_size=70):
"""初始化电瓶的属性"""
self.battery_size=battery_size
def describe_battery(self):
"""打印一条电瓶的信息"""
print("this car has a "+str(self.battery_size)+"-kwh battery.")
class ElectriCar(Car):
"""电动汽车的独特之处"""
def __init__(self,make,model,year):
"""初始化父类属性"""
super().__init__(make,model,year)
self.battery=Battery()
my_tesla=ElectriCar('tesla','model s',2016)
my_tesla.battery=Battery(30)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
以上是一段类的有关代码,在这一段高亮的代码中,我们可以看到,my_tesla 中有一个Battery类作为属性,描述电池的信息
其输出结果如下:
在这里,我认为是my_tesla 这个ElectriCar类通过my_tesla.battery=Battery(30)这个操作,生成了和内部同名的Battery类,并将其覆盖。
如果高亮的代码改为
my_tesla=ElectriCar('tesla','model s',2016)
my_tesla.bat=Battery(30)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
也可以正确输出,结果为:
此时,认为是my_tesla创建了两个Battery类,如果加一句my_tesla.bat.describe_battery(),那么输出结果如下:
my_tesla=ElectriCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.bat.describe_battery()
这种输出方式是错误的,应为my_tesla中并没有bat这个属性