Python3类的特性(教程)

 

  • 类的定义与实现

 

 

 

 

 

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

 

任务

 

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('请正确填写相关的车辆信息')

     

  •  
  •  

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值