七、python-类

    技术2024-07-21  79

    python-类

    面向对象编程,编写表示现实世界中的食物和情景的类,并基于这些类来创建对象。 基于类创建对象被称为实例化,每个对象都自动具备这种通用行为,可以根据需要赋予每个对象独特的特性。

    一.创建和使用类

    class Dog(): """一次模拟小狗的简单尝试""" def __init__(self,name,age): self.name=name self.age=age def sit(self): """模拟小狗被命令时蹲下""" print(self.name.title() + " is now sitting.") def roll_over(self): """模拟小狗被命令时打滚""" print(self.name.title() + "rolled over") my_dog=Dog('willie',6) print("My dog's name is " + my_dog.name.title() + ".") print("My dog is " + str(my_dog.age) + " years old.") my_dog.sit() My dog's name is Willie. My dog is 6 years old. Willie is now sitting.

    类中的函数称为方法 方法__init()__是一个特殊的方法,根据Dog类创建新实例时,python都会自动运行它,并自动传入实参self。 每个与类相关联的方法都自动传递实参self,它是一个指向实例本身的引用,让实例可以访问类中属性和方法。 根据Dog类创建实例时,只需要给后两个形参name,age提供值。

    首字母大写的名称指的是类,小写的名称指的是根据类创建的实例。

    访问属性 句点表示法,my_dog.name 调用方法 my_dog.sit()

    二.使用类和实例

    1.给属性指定默认值

    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 = 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.") my_new_car = Car('audi','a4',2016) my_new_car.read_odometer() This car has 0 miles on it.

    2.修改属性的值

    直接修改属性的值 通过实例直接访问它:

    my_new_car.odometer_reading=23 my_new_car.read_odometer() This car has 23 miles on it.

    通过方法修改属性的值 在类定义里添加update_odometer()方法

    def update_odometer(self,mileage): """将里程表读数设置为指定的值""" self.odometer_reading = mileage my_new_car.update_odometer(23) my_new_car.read_odometer() This car has 23 miles on it.

    3.通过方法对属性的值进行递增

    在类的定义里增加increment_odometer()方法

    def increment_odometer(self,miles): """将里程表读数增加指定的量""" self.odometer_reading += miles my_new_car = Car('audi','a4',2016) my_new_car.read_odometer() my_new_car.update_odometer(50) my_new_car.increment_odometer(30) my_new_car.read_odometer() This car has 0 miles on it. This car has 80 miles on it.

    三.继承

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

    class Electric(Car): def __init__(self,make,model,year): """初始化父类的属性""" super().__init__(make,model,year) my_tesla=Electric('tesla','model s',2016) print(my_tesla.get_descriptive_name()) 2016 Tesla Model S

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

    方法__init__()接受创建Car实例所需的信息。

    super()是一个特殊函数,帮助父类和子类关联起来,这行代码让子类实例包含父类的所有属性。 父类也称为超类(superclass)。

    1.给子类定义属性和方法

    class Electric(Car): def __init__(self,make,model,year): """ 电动汽车的独到之处 初始化父类的属性,再初始化电动汽车的特有属性 """ super().__init__(make,model,year) self.battery_size = 70 def describe_battery(self): """打印一描述电瓶容量的信息""" print("This car has a " + str(self.battery_size) + "-KWh battery") 2016 Tesla Model S This car has a 70-KWh battery

    2.重写父类的方法

    若父类的方法不符合子类模拟的实物的行为,可以在子类中定义这样一个方法,只要它与重写的父类方法同名。 python将不会考虑这个父类方法,只关注在子类中定义的相应方法。

    3.将实例用作属性

    class Battery(): """一次模拟电动汽车的电瓶的简单尝试""" def __init__(self,battery_size=70): self.battery_size = battery_size def describe_battery(self): print("This car has a " + str(self.battery_size) + "-KWh battery") class Electric(Car): def __init__(self,make,model,year): """ 电动汽车的独到之处 初始化父类的属性,再初始化电动汽车的特有属性 """ super().__init__(make,model,year) self.battery = Battery() my_tesla.battery.describe_battery() This car has a 70-KWh battery

    self.battery = Battery()在ElectricCar类中添加了一个self.battery属性,创建了一个新的Battery实例,并将该实例存储在属性self.battery中。

    四.导入类

    将car类存储在一个名为car.py的模块中。 导入单个类

    from car import Car

    在一个模块中存储多个类 类Battery和类ElectricCar在模块car.py中

    from car import ElectricCar

    从一个模块导入多个类

    from car import Battery,ElectricCar

    导入整个模块

    import car

    导入模块中所有类(不推荐) from module_name import *

    五.类编码风格

    类名采用驼峰命名法:类中每个单词的首字母都大写,不使用下划线。实例名和模块名都小写,单词之间加下划线。

    每个类在类定义后面包含一个文档字符串简要描述类的功能。模块也要。

    类中可用一个空行来分隔方法,模块中用两个空行来分隔类。

    先编写导入标准库模块的import语句,再添加一个空行,导入自己编写的模块的import语句。

    Processed: 0.034, SQL: 9