《Python编程从入门到实践》——学习python的第十五天

Posted 小清高class

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Python编程从入门到实践》——学习python的第十五天相关的知识,希望对你有一定的参考价值。

Python学习的第十五天

前言

上次我们已经开始接触类了,让我们继续深入学习吧。话不多说,直接开始。阅读之前,提示大家一定要看注释注释注释

继承
编写类时并非一定要从空白开始,如果要编写的类是另一个现成类的特殊版本,可继续使用继承,一个类继承另一个类,将自动获得拎一个类的所有属性和方法。原有的类称为父类,新类称为子类,子类同时还可以定义自己的属性和方法。

这里的Car是父类,Electric_Car是子类,

class Car:
    """一次模拟汽车的简单尝试"""


    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year


    def get_descriptive_name(self):
        """返回整洁的描述性信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return  long_name.title()




    def updata_odometer(self, mileage):
        """对里程表进行更新"""
        self.odometer_reading = mileage




    def increase_odometer(self, miles):  # 在方法二的基础上新建了一个新的方法,来表示增量,并警告不能为赋值
        """增加新加的里程"""
        if miles >= 0:
            self.odometer_reading += miles
        else:
            print("nmd hai xiang xiu gai cheng fu zhi")




#创建子类时,父类文件必须包含在该文件中,且圆括号内必须包含父类的名称
class Electric_Car(Car):
    """描述电动汽车类"""


    def __init__(self,make,model,year):
        """
        初始化父亲的属性
        再初始化电动汽车特有的属性
        """
        super().__init__(make,model,year)#super()能够让我们调用父类的方法
        self.battery_size = 75#直接在子类的基本属性中添加基本属性了

    def describe_battery(self):#添加新的方法
        """打印一条描述电瓶容量的消息"""
        print(f"This car has a {self.battery_size}-kwh battery.")

my_tesla = Electric_Car('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()

结果:
2019 Tesla Model S
This car has a 75-kwh battery.
#父类是无法使用子类的属性和方法的

重写父类的方法
当父类和子类中含有同一个方法时,当子类调用该方法时,Python会忽略父类的方法,直接实行子类的方法,所以你只需要在子类中改写就行了

将实例用作属性
因为在模拟实物中会有越来越多的细节致使一个类变的有些复杂,这个时候我们可以从中提取其中的细节,把该细节作为一个类,并将该类中的实例作为子类的属性。

这里是将子类中的电池给单独分离出来,形成一个新的类

class Car:
---snip---
#创建子类时,父类文件必须包含在该文件中,且圆括号内必须包含父类的名称
#---snip--- 表示上一个代码中父类的基本属性

class Battery:#先是定义了一个新类——Battery,他没有继承任何类。
    """一次模拟电动汽车电瓶的简单尝试。"""


    def __init__(self,battery_size = 75):#其中有一个形参battery_size,这个形参是可选的,被默认为75.但不是默认值,仍然可以进行改变的
        """初始化电瓶的属性"""
        self.battery_size = battery_size


    def describe_battery_size(self):
        """打印一条描述电瓶容量的消息"""
        print(f"This car has a {self.battery_size}-kwh battery")




    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size == 75:
            range = 260


        elif self.battery_size == 100:
            range = 315


        print(f"This car can go about {range} miles on a full charge")


#虽然将原来的实例电池作为属性,有点繁杂,但是整个之后可以方便我们对电池进行更详细的描述,不至于在子类中显得太繁杂


class Electric_Car(Car):
    """描述电动汽车类"""


    def __init__(self,make,model,year):
        """
        初始化父亲的属性
        再初始化电动汽车特有的属性
        """
        super().__init__(make,model,year)#super()能够让我们调用父类的方法
        self.battery_size = Battery()#直接在子类的基本属性中添加基本属性了




    def describe_battery(self):#添加新的方法
        """打印一条描述电瓶容量的消息"""
        print(f"This car has a {self.battery_size.battery_size}-kwh battery.")#当battery没有变成类的时候,battery相当于一个一个简单
#的属性并且已经是个默认值了。但是将battery变成类时,battery_size = Battery 然后需要去该类中寻找描述电池的方法,所以格式为,实例名.属性.类方法




    def fill_gas_tank(self):
        """电瓶车没有汽油"""
        print(f"This car doesn't need a gas tank")


my_tesla = Electric_Car('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()


my_tesla.fill_gas_tank()


my_tesla.battery_size.describe_battery_size()
my_tesla.battery_size.get_range()

结果:
2019 Tesla Model S
This car has a 75-kwh battery.
This car doesn’t need a gas tank
This car has a 75-kwh battery
This car can go about 260 miles on a full charge

今天这里只有两个代码,但是有点难理解,所以就弄的少一点,大家一定要看代码中的注释。

希望大家能够完成和理解,加油。

以上是关于《Python编程从入门到实践》——学习python的第十五天的主要内容,如果未能解决你的问题,请参考以下文章

《Python编程从入门到实践》高清中文版带标签可复制PDF学习下载

《Python编程从入门到实践》——学习python的第十六天

《Python编程从入门到实践》——学习python的第十天

《Python编程从入门到实践》——学习python的第十三天

《Python编程从入门到实践》——学习python的第十一天

《Python编程从入门到实践》——学习python的第十七天