LYang194
2021-08-17 22:35
采纳率: 50%
浏览 34
已结题

继承了父类,为何连父类外的代码都要一起运行呢

我学习的时候,有2个模块,模块electric_car中继承了模块car中的Car类。为何我在运行模块car时连模块electric_car中Car类之外的代码都一起运行了呢,有解释吗。

运行模块electric_car的理想结果:
这辆车的电瓶容量是75Ah。

但是,运行模块electric_car的实际结果:
这辆车已跑了100公里。
这辆车的电瓶容量是75Ah。


模块car:
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 = f"{self.year} {self.make} {self.model}"
    return long_name.title()

def read_odometer(self):
    "打印汽车里程"
    print (f"这辆车已跑了{self.odometer_reading}公里。")

def update_odometer(self, meter):
    "更新汽车里程,并禁止将里程回调"
    if meter >= self.odometer_reading:
        self.odometer_reading = meter
    else:
        print ("禁止回调汽车里程数。")

def increment_odometer(self, miles):
    "将里程表读数增加指定的量"
    self.odometer_reading += miles

my_new_car = Car('audi', 'a4', 2019)
my_new_car.increment_odometer(100)
my_new_car.read_odometer()


模块electric_car:
from car import Car

class Battery:
"电动汽车电瓶"

def __init__(self, battery_size=75):
    "
    电动车电瓶属性:
    电瓶规格默认75Ah(安时)
    "
    self.battery_size = battery_size

def describe_battery(self):
    "打印一条描述电瓶容量的消息"
    print (f"这辆车的电瓶容量是{self.battery_size}Ah。")

class ElectricCar(Car):
"电动汽车类,继承汽车类"

def __init__(self, make, model, year):
    "
    初始化父类的属性;
    添加子类特有的属性:电瓶
    "
    super().__init__(make, model, year)
    self.battery = Battery()

def describe_battery(self):
    "打印电动车电瓶容量"
    print (f"有一个 {self.battery_size}-kwh的电瓶")

my_tesla = ElectricCar('tesla', 'model s', 2019)
my_tesla.battery.describe_battery()

  • 收藏

3条回答 默认 最新

  • 心里不好受 2021-08-17 22:46
    已采纳

    Import模块时,该模块的顶级语句都会执行,变量函数和类也会生成,只有if name = "main":下的语句除外

    已采纳该答案
    打赏 评论
  • Air Mind 2021-08-17 22:43

    输出跑100公里的是
    my_new_car.increment_odometer(100)
    my_tesla并没有执行此函数

    打赏 评论
  • C_Code_P 2021-08-17 23:50

    这个问题把我给雷到了,不运行父类,你继承他干嘛,

    打赏 评论

相关推荐 更多相似问题