Python教程(9)

9 类

用class创建一个类

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

    def __init__(self, make: str, model: str, year: int):
        self.make = make
        self.model = model
        self.year = year
        return

  def get_descriptive_name(self):	# 定义一个函数,输出汽车的相关信息
        """返回整洁的描述信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()


my_car = Car('Auto', 'A6L', '2019')
print(my_car.get_descriptive_name())

9.1 创建类和使用类

9.1.1 创建类

方法-_ init _( )
  • 类中的函数称为方法—init—( )是一个特殊的方法,每当根据类创建新实例时,都会自动运行它,类似于c++和Java中的构造函数。
  • 在类的方法中,参数列表会含有一个self,每个与类相关联的方法调用都会自动传递参数,它是一个指向实例本身的引用,让实例能够直接访问类中的属性和方法。当通过实参向类传递名字和年龄,self会自动传递,因此我们不需要传递它,类似于其他高级语言中的this。
  • 以self为前缀变量都可以供类中的所有方法使用,还可以通过类的任何实例来访问这些变量。如self.make=name会获取存储在形参make 中的值。

9.1.2 调用方法

在创建类的实例后,就可以通过使用句点表示法来调用类定义的任何方法。

9.2 使用类和实例

9.2.1 给属性指定默认的值

类中的每一个属性都必须有初始值,哪怕这个值是0或空字符串,如果你对方法中某个属性这么多了,那么在调用时,就不需要为它提供初始值的形参。

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

    def __init__(self, make: str, model: str, year: int):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0	#odometer变量的初始值为0
        return

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

    def read_odometer(self):
        """打印一条消息,指出汽车的里程"""
        print("This car has " + str(self.odometer_reading) + "miles on it.")
        return

9.2.2 通过方法来修改属性的值

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

9.3 继承

一个类继承另一个类时,它将自动获取另一个类的所有属性和方法,原有的类称为父类,而新的类称为子类,子类除了继承父类的所有属性和方法,还可以定义自己的属性和方法

9.3.1 子类的方法__init__( )

创建子类时,Python首先需要完成的任务是给父类的所有属性赋值,为此,子类的方法__init__( )需要父类施以援手

class ElectricCar(Car):
    """模拟电动汽车的独特之处"""

    def __init__(self, make: str, model: str, year: int):
        """初始化父类的属性,再初始化电动汽车特有的属性"""
        super.__init__(make, model, year)
        return
  • 创建子类时,父类必须包含在当前文件中,且位于子类的前面
  • super( )是一个特殊的函数,帮助Python将父类和子类联系起来,它可以自动调用父类的方法__init__( )

9.3.2 重写父类的方法

对于父类的方法,只要不符合子类模拟的方法,都可以对其进行重写。为此,只要在子类中定义一个方法,它与要重写的父类方法同名。

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

9.4 导入类

from Car.car import Car, ElectricCar

my_car = Car('Auto', 'A6L', 2019)
print(my_car.get_descriptive_name())
#Car.py
class Car:
    """一次模拟汽车的简单尝试"""

    def __init__(self, make: str, model: str, year: int):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0
        self.gas=100
        return

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

    def read_odometer(self):
        """打印一条消息,指出汽车的里程"""
        print("This car has " + str(self.odometer_reading) + "miles on it.")
        return

    def update_odometer(self, mileage):
        """将里程表设置为指定的值,并且拒绝往回调"""
        if mileage > self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer.")
        return

    def fill_gas_tank(self):
        """打印一条消息,指出汽车的油量"""
        print("This car has "+str(self.gas)+" litre of oil")
        return

    def increment_odometer(self, miles):
        """将里程表读数增加指定的量"""
        self.odometer_reading += miles
        return
    def __str__(self):
        return self.get_descriptive_name()
class Battery:
    """一次模拟电池的简单尝试"""

    def __init__(self, battery_size=70):
        """初始化电瓶容量"""
        self.battery_size = battery_size
        return

    def describe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-Kwh battery")
        return

    def get_range(self):
        """打印一条描述电瓶续航里程的消息"""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270

        message = "This car an go approximately " + str(range)
        message += " miles on a full charge."
        print(message)
        return


class ElectricCar(Car):
    """模拟电动汽车的独特之处"""

    def __init__(self, make: str, model: str, year: int):
        """初始化父类的属性,再初始化电动汽车特有的属性"""
        super.__init__(make, model, year)
        self.battery = Battery()
        return

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值