Python基础学习_继承

文章介绍了Python中的继承概念,如何创建子类并初始化父类属性,以及如何通过子类重写父类方法。示例中展示了ElectricCar类如何继承Car类,并添加电动汽车特有的属性和方法。另外,还展示了如何将共有的电池功能抽象成Battery类,作为ElectricCar的实例属性。
摘要由CSDN通过智能技术生成

1 继承

定义:如果编写的一个类是另一个类的特殊版本,可以使用继承。(即类不是从空白开始写)

父类(超类):一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,原有类称父类

子类:新类称为子类

子类继承了父类所有的属性和方法,同时还可以定义自己属性和方法

1.1 子类的方法__init__()

创建子类实例之前,python需要给父类的所有属性赋值,子类__init__()需要父类帮助

# 父类
class Car():
    """一次模拟汽车的简单测试"""
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year  = year
        self.odometer_reading = 0
    
    def get_describle_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name
    
    def read_odometer(self):
        print("This car has " + str(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 an odometer!")

    def increment_odometer(self,miles):
        self.odometer_reading += miles
    
        
    def fill_gas_tank(self):
        """电动车没有油箱"""
        print("This car doesn't need a gas tank!")
# 子类
class ElectricCar(Car):
    """电动汽车的独特之处"""
    
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_describle_name())

子类

class ElectricCar(Car):
    """电动汽车的独特之处"""
    
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_describle_name())

结果:

2016 tesla model 

super()特殊函数:帮助python将父类和子类关联起来,让子类具有父类的属性。

在Python中,super函数用于调用父类的方法。它的语法如下:
super([type[, object-or-type]])
其中,type是子类的类型,object-or-type是子类的实例或类型。如果省略type和object-or-type,则super函数会返回一个未绑定的超类方法对象,可以用于调用父类的未绑定方法。
需要注意的是,super函数只能用于调用父类的实例方法,而不能用于调用父类的类方法和静态方法。此外,如果父类中存在多个同名方法,super函数只会调用其第一个找到的方法。
类的类方法:
在Python中,类方法是一种特殊的方法,它与类本身而不是类的实例相关联。类方法使用@classmethod装饰器进行修饰,它的第一个参数通常被命名为cls,用于表示类本身。类方法可以在类的实例和类本身上进行调用。
需要注意的是,super函数只能用于调用父类的实例方法,而不能用于调用父类的类方法和静态方法。此外,如果父类中存在多个同名方法,super函数只会调用其第一个找到的方法。
类的类方法:

1.2 给子类定义属性和方法

子类

class ElectricCar(Car):
    """
    电动汽车的独特之处
    初始化父类的属性,再初始化电动汽车特有的属性
    """
    
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        
        # 添加子类属性
        self.battery_size = 70
    
    # 添加子类方法
    def describle_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-KWh battery.")

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_describle_name())
my_tesla.describle_battery()

结果:

2016 tesla model s
This car has a 70-KWh battery.

总结:如果一个属性或者方法是所有类都有的,

将其放在父类里面,只有子类有的属性和方法放在子类里面

1.3 重写父类的方法

重写时机:父类的方法不符合子类模拟的实物行为,就考虑重写父类方法

如果父类方法名与子类方法名重合,python只考虑子类中定义的方法

子类

class ElectricCar(Car):
    """
    电动汽车的独特之处
    初始化父类的属性,再初始化电动汽车特有的属性
    """
    
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        
        # 添加子类属性
        self.battery_size = 70
    
    # 添加子类方法
    def describle_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-KWh battery.")
    
    def fill_gas_tank(self):
        """电动车没有油箱"""
        print("This car doesn't need a gas tank!")


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_describle_name())
my_tesla.describle_battery()
my_tesla.fill_gas_tank()

结果:

2016 tesla model s
This car has a 70-KWh battery.
This car doesn't need a gas tank!

1.4 将实例属性作属性

将某一类属性或者方法挑选出来放到一个类里面

将共有的电瓶功能区挑选出来作为一个类:

class Battery():
    """一次模拟电动车电瓶的简单尝试"""
    
    def __init__(self,battery_size = 70):
        """初始化电瓶属性"""
        self.battery_size  = battery_size
        
    def describle_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-KWh battery.")
    
    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size == 70:
            ranges = 240
        elif self.battery_size == 85:
            ranges = 270
        
        message = "The" +  "car can go apporoximately " + str(ranges)
        message += " miles on full charge."
        print(message)

class ElectricCar(Car):
    """电动车的独特之处"""
    
    def __init__(self, make, model, year):
        """
        初始化父类的属性,再初始化电动汽车特有的属性
        """
        super().__init__(make,model,year)
        self.battery = Battery()                 # 将Battery类作为子类属

my_tesla = ElectricCar('tesla', 'model s', 2016)

print(my_tesla.get_describle_name())
my_tesla.battery.describle_battery()
my_tesla.battery.get_range()

结果:

2016 tesla model s
This car has a 70-KWh battery.
Thecar can go apporoximately 240 miles on full charge.

总结:

1、父类:最先创建的类 ; 子类:后面创建的类
2、子类方法的创建:
初始化父类参数:def init(self,父类中参数列表):
super().init(父类参数)
子类参数定义
3、子类参数定义 紧接着父类参数后面一行写:self.子类参数名 = 初始值
4、重写父类方法:适用场合父类和子类都有的行为,
5、将实例作属性:即将对象共有的属性和方法包装在一个类中,然后将这个类的对象实例化作为类的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值