python 类——学习疑惑

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())

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这个属性

猜你喜欢

转载自blog.csdn.net/weixin_41982136/article/details/80077834
今日推荐