VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • Python语法基础(4)

2016 tesla model s

创建子类时,父类必须包含在当前文件中,且位于子类的前面

给予类定义属性和方法

下面来添加一个电动车特有的属性(电瓶),以及一个描述该属性的方法。我们将存储电瓶容量,并编写一个打印电瓶描述的方法:

#来创建一个电动车的类
class ElectricCar(Car):
    '''电动车独特的属性'''
    def __init__(self,make,model,year):
        '''
        初始化父类的属性
        初始化电动车特有的属性
        '''
        super().__init__(make,model,year)
        self.battery_size = 70
    def describe_battery(self):
        '''打印一条信息来描述电瓶'''
        print("这辆电瓶车有着"+ str(self.battery_size) + "容量的电池")

my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
2016 tesla model s
这辆电瓶车有着70容量的电池

重写父类的方法

​ 对于父类的方法,只要它不符合子类模拟实物的行为,都可以对其进行重写。为此,可以在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关心你在子类中定义的相应方法:

假设Car类中有一个名为fill_gas_tank()的方法,它对电瓶车来说毫无意义,因此你想要重写它。下面演示了一种重写的方法。

class Car():
def fill_gas_tank(self):
    '''为汽车增加尾气排放数值'''
    print("该汽车的尾气排放量为"+ str(self.gas_tank) +"每公里")

~~~Python

class ElectricCar(Car):
def fill_gas_tank(self):
'''电动车没有油箱'''
print("电动车不会排除尾气")

my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
print("\n")
my_car = Car('本田','思域',2018)
my_car.fill_gas_tank()

~~~
2016 tesla model s
这辆电瓶车有着70容量的电池
电动车不会排除尾气


该汽车的尾气排放量为13每公里

将实例用作属性

​ 使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多:属性和方法清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来。你可以将大型类拆分成多个协同工作的小类。

​ 例如,不断给ElectricCar类添加细节时,我们可能会发现其中包含很多专门针对汽车电瓶的属性和方法。在这种情况下,我们可将这些属性和方法提取出来,放到另一个专门名为Battery的类中,并将一个Battery实例用作ElectricCar类的一个属性:

class Car():

```Python
#来创建一个电瓶类
class Battery():
    '''一次模拟电动汽车电瓶的简单尝试'''
    def __init__(self,battery_size=70):
        '''初始化电瓶的属性'''
        self.battery_size = battery_size

    def describe_battery(self):
        '''打印一条描述电瓶的信息'''
        print("这辆电动车的电瓶的容量是"+ str(self.battery_size))
        
#来创建一个电动车的类
class ElectricCar(Car):
    '''电动车独特的属性'''
    def __init__(self,make,model,year):
        '''
        初始化父类的属性
        初始化电动车特有的属性
        '''
        super().__init__(make,model,year)
        self.battery = Battery()    

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

print(my_test.get_descriptive_name())
my_test.attery.describe_battery()
```

~~~Python
2016 tesla model s
这辆电动车的电瓶的容量是70

下面再给Battery添加一个方法,它根据电瓶容量报告汽车的续航里程:

class Battery():
    '''一次模拟电动汽车电瓶的简单尝试'''
    def __init__(self,battery_size=70):
        '''初始化电瓶的属性'''
        self.battery_size = battery_size

    def describe_battery(self):
        '''打印一条描述电瓶的信息'''
        print("这辆电动车的电瓶的容量是"+ str(self.battery_size))

    def get_range(self):
        '''打印出一条信息,指出电瓶的续航里程'''
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270

        message = "现在的电池容量能走"+str(range)+"KM 路程"
        print(message)

#来创建一个电动车的类
class ElectricCar(Car):
    '''电动车独特的属性'''
    def __init__(self,make,model,year):
        '''
        初始化父类的属性
        初始化电动车特有的属性
        '''
        super().__init__(make,model,year)
        self.battery = Battery()
        
my_test = ElectricCar('tesla','model s',2016)

print(my_test.get_descriptive_name())
my_test.battery.describe_battery()
my_test.battery.get_range()
2016 tesla model s
这辆电动车的电瓶的容量是70
现在的电池容量能走240KM 路程
  • 导入类

随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,python允许你将类存储在模块中,然后在主程序中导入所需的模块。

导入单个类

#encoding:utf-8
from Car import Car

my_new_car = Car('东风','日产',2022)
print(my_new_car.get_descriptive_name())

my_new_car.odometer_reading = 23
my_new_car.read_odometer()
2022 东风 日产
你的汽车已经行驶了23km!

在一个模块中存储多个类

现在可以新建一个名为my_electric_car.py的文件,导入ElectricCar类,并创建一辆电动汽车了:

#encoding:utf-8
from Car import ElectricCar

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

print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
2016 tesla model s
这辆电动车的电瓶的容量是70
现在的电池容量能走240KM 路程

相关教程