-
类的定义与实现
私有变量无法直接访问,也无法直接改变,需要通过程序给的可操作接口,进行改变
任务
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('请正确填写相关的车辆信息')
-
-