博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3类的特性(教程)
阅读量:2047 次
发布时间:2019-04-28

本文共 4527 字,大约阅读时间需要 15 分钟。

 

  • 类的定义与实现

 

 

 

 

 

 私有变量无法直接访问,也无法直接改变,需要通过程序给的可操作接口,进行改变

 

任务

 

1、自定义一个交通工具类(Vehicle)

 

2、设置类属性trans_type(固定值为'SUV')和实例属性速度speed(int 类型,单位为 km/h)、体积size(tuple类型,单位为米。)

 

3、自定义方法 show_info( ),打印实例的所属类型和速度、体积的值;

 

4、自定义实例方法如下:

    (1)定义move( )方法,实现打印“我已向前移动了50米”

    (2)定义set_speed(new_speed)方法,设置对应实例的速度为new_speed km/h

    (3)定义get_speed()方法,如果(2)中设置了速度值则打印出来,打印格式为'我的时速为:设置的速度值 km/h'

    (4)定义speed_up()方法,设置每次调用时实例的速度都增加10km/h,并打印“我的速度由xx km/提升到了xx km/h”

    (5)定义speed_down()方法,设置每次调用时实例的速度都降低15km/h,并打印“我的速度由xx km/下降到了xx km/h”

 

5、自定义方法 transport_identify( ),判断实例是否为Vehicle类型。若是则打印‘类型匹配’,反之则打印‘类型不匹配’

 

6、初始化实例对象tool_1,并根据上述效果图调用对应方法

 

任务提示

 

类的初始化方法中所传参数size是元组类型,直接传入实例的长,宽,高即可,如size=(10,10,10)

class Vehicle(object):    # 自定义Vehicle类属性    trans_type = 'SUV'    # 自定义实例的初始化方法    def __init__(self,speed,size):        self.speed = speed        self.size = size# 自定义实例方法show_info,打印实例的速度和体积    def show_info(self):        print('速度:{0}km/h,体积:{1}'.format(self.speed,self.size))    # 自定义实例方法move,打印“我已向前移动了50米”    def move(self):        print('我已经向前移动了50米')    # 自定义实例方法set_speed,设置对应的速度值    def set_speed(self,speed):        self.speed = speed    # 自定义实例方法get_speed,打印当前的速度值    def get_speed(self):        print('我的时速为:{0}km/h'.format(self.speed))    # 自定义实例方法speed_up,实现对实例的加速    def speed_up(self):        speed2 = self.speed+10        print('我的速度由{0}km/h提升到了{1}km/h'.format(self.speed,speed2))        self.speed = speed2    # 自定义实例方法speed_down,实现对实例的减速    def speed_down(self):        speed3 = self.speed - 15        print('我的速度由{0}km/h下降到了{1}km/h'.format(self.speed,speed3))        self.speed = speed3    # 自定义实例方法transport_identify,实现对实例所属类型的判断    def transport_identify(self):        if isinstance(self,Vehicle):            print('类型匹配')        else:            print('类型不匹配')if __name__ == "__main__":    tool_1 = Vehicle(20, (3.6, 1.9, 1.75))    # 调用实例方法 打印实例的速度和体积    tool_1.show_info()    # 调用实例方法 实现实例的前移    tool_1.move()    tool_1.set_speed(40)    # 调用实例方法 打印当前速度    tool_1.get_speed()    # 调用实例方法 对实例进行加速    tool_1.speed_up()    # 调用实例方法 对实例进行减速    tool_1.speed_down()    # 调用实例方法 判断当前实例的类型    tool_1.transport_identify()

 

 类的继承与实现

类的继承

  • 子类继承父类时可以增加新的方法或属性,也可以使用父类的,但是不能选择性的继承父类。
  •  

  •  所谓的继承不过也是多态的一种实现罢了

类的高级特性

  •  

  • 使用__slots__方法后不允许任意绑定属性或方法,只可以绑定__slots__中出现的属性或方法
  •  
  • 任务

     

    1、自定义Car类,并重写其构造(初始化)方法__init__( ),将参数l,w,h,brand赋值给实例对象的属性L,W,H,brand。设置类属性description,以列表形式初始化值为:'大众','丰田','广本','沃尔沃', '凯迪拉克'

     

    2、自定义该类实例方法modify_des ( )。功能:判断类属性description是否存在,若存在,直接返回;反之,返回“请输入您的车辆描述”

     

    3、自定义静态方法basic_parameters( )。功能:打印‘已完成车辆基本参数信息的录入!’

     

    4、自定义类方法upkeep( ),并接收参数desc。功能:判断参数desc是否在类属性description之中,若条件成立则打印“根据汽车保养的相关经验,xx品牌的车应于5000km/次的频率进行专业性保养”;反之则打印“非常抱歉!xx品牌不在我们的保养范围内”

     

    5、实例化Car类对象car_1,并调用实例方法basic_parameters()

     

    6、运用if-else结构,调用实例(car_1)方法modify_des( )作为if语句的判断条件,若成立则调用实例的upkeep( )方法,并将实例car_1的brand属性传递给参数desc;反之则打印:'请正确填写相关的车辆信息'

     

    7、实例化Car类对象car_2,并调用实例方法basic_parameters()

     

    8、运用if-else结构,调用实例(car_2)方法modify_des( )作为if语句的判断条件,若成立则调用实例的upkeep( )方法,并将实例car_2的brand属性传递给参数desc;反之则打印:'请正确填写相关的车辆信息'

     

    任务提示

     

    1、判断属性是否存在可以使用hasattr() 函数

    2、在自定义类方法upkeep( )时,为了在打印语句中成功获取车辆(实例对象)的brand属性,需在upkeep( )设置一个参数desc接收传递的属性。

  • class Car(object):# Car类的基本车型设置,列表形式    description = ['大众', '丰田', '广本', '沃尔沃', '凯迪拉克']    # 重写该类的构造方法,并将参数l、w、h、brand赋值给实例对象属性    def __init__(self, l, w, h, brand):        self.L = l        self.W = w        self.H = h        self.brand = brand    # 自定义该类的基本车型检索方法    def modify_des(self):        if hasattr(self, 'description'):            return True        else:            print("请输入您的车辆描述")        # 自定义静态方法 提示用户:‘已完成车辆基本参数信息的录入!’    @staticmethod    def basic_parameters():        print('已完成车辆基本参数信息的录入')    # 自定义类方法 根据用户车辆的品牌给出相应的合理保养建议    @classmethod    def upkeep(cls, desc):        if desc in cls.description:            print('根据汽车保养的相关经验,{0}品牌的车应于5000km/次的频率进行专业性保养'.format(desc))        else:            print('非常抱歉,{0}品牌不在我们的保养范围内'.format(desc))if __name__ == '__main__':    car_1 = Car(4.2, 1.8, 1.5, '大众')    # 调用实例方法:basic_parameters()    car_1.basic_parameters()    # 利用if语句,调用modify_des()以判断Car的类属性description是否存在    if car_1.modify_des():    # 若if判断条件成立 则调用类方法upkeep()并将对应实例的brand属性传递给参数desc        car_1.upkeep(car_1.brand)    # 当if语句的判断条件不成立时,打印输出并提示用户:‘请正确填写相关的车辆信息’    else:        print('请正确填写相关的车辆信息')    car_2 = Car(4.2, 1.8, 1.5, '保时捷')    # 调用实例方法:basic_parameters()    car_2.basic_parameters()    # 利用if语句,调用modify_des()以判断Car的类属性description是否存在    if car_2.modify_des():    # 若if判断条件成立,则调用类方法upkeep()并将对应实例的brand属性传递给参数desc        car_2.upkeep(car_2.brand)    # 当if语句的判断条件不成立时,打印输出并提示用户:‘请正确填写相关的车辆信息’    else:        print('请正确填写相关的车辆信息')

     

  •  
  •  

 

 

 

转载地址:http://xcmof.baihongyu.com/

你可能感兴趣的文章
启航 —— 记 —— 第二次自考的反思:自考与自我改造的困境
查看>>
数据结构与算法(三)——线性表
查看>>
Java8学习笔记(一)—— 函数式编程的四个基本接口
查看>>
Java8学习笔记(二)—— Lambda表达式
查看>>
Java8学习笔记(三)—— Optional类的使用
查看>>
Java8学习笔记(四) —— Stream流式编程
查看>>
Java8学习笔记(五)—— 方法引用(::双冒号操作符)
查看>>
数据结构与算法(四)—— 栈与队列
查看>>
数据结构与算法(五)—— 广义表
查看>>
微服务简介
查看>>
CAP定理
查看>>
Docker初探
查看>>
Docker镜像常用命令
查看>>
使用Dockerfile定制镜像
查看>>
Docker容器数据持久化
查看>>
Docker Compose
查看>>
GitLab克隆项目出现 “git未能顺利结束(退出码128)”问题的解决
查看>>
SpringBoot整合FastDFS(附源码)
查看>>
在RoboWare Studio下利用python语言实现话题
查看>>
科学计算库——NumPy库
查看>>