不明白的地方

不明白的地方

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 self.brand in self.description:
           return True
       else:
           return '请输入您的车辆描述'

   # 自定义静态方法 提示用户:‘已完成车辆基本参数信息的录入!’
   @staticmethod
   def basic_parameters():
       print('已完成车辆基本参数信息的录入!')

   # 自定义类方法 根据用户车辆的品牌给出相应的合理保养建议
   @classmethod
   def upkeep(cls, desc):
       if desc in cls.description:
           print('根据汽车保养的相关经验,{0}品牌的车应于500Km/次的频率进行专业性保养'.format(desc))
       else:
           print('非常抱歉!{0}品牌不在我们的保养范围内'.format(desc))


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、我这个代码运行出来的效果,我题目中的效果图一样。但是在函数modify_des()中,如果我传入的汽车品牌没在description中,返回的为:请输入您的车辆描述。为一个字符串,if一个字符串为True,会调用car_2.upkeep(car_2.brand)
;如果传入的汽车品牌在description中,返回的为:True,也会调用car_2.upkeep(car_2.brand),那这个if判断有什么用呢,结果都恒为真。还是我写的代码有问题,请老师指导。

2、

#用classmethod时参数用cls,表示这个类
@classmethod
def show_info(cls,name):
   """显示猫的信息"""
   #name那会报错,因为类里面没有name属性
   #print('类的属性:{0},实例的属性:{1}'.format(cls.tag,cls.name))
   return cls(name)
   #上面这句话相当于,cat = Cat(name)  return cat


上面这是之前老师讲课时说的这个name不是类属性,需要返回一个类属性。

# 自定义类方法 根据用户车辆的品牌给出相应的合理保养建议
@classmethod
def upkeep(cls, desc):
   if desc in cls.description:
       print('根据汽车保养的相关经验,{0}品牌的车应于500Km/次的频率进行专业性保养'.format(desc))
   else:
       print('非常抱歉!{0}品牌不在我们的保养范围内'.format(desc))

而这段代码中就直接用了cls.description,我是不是可以理解为description就是类属性,就可以直接这么用

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学,你好。

1、self.description可以得到该属性的值['大众', '丰田', '广本', '沃尔沃', '凯迪拉克']。在python中,列表,字符串等数据类型,只要不是空的,在逻辑判断时为True。因此not self.description为False。

http://img1.sycdn.imooc.com//climg/5dd0ab3509012f2808020484.jpg

2、空列表,空字符串或None在逻辑判断时都会为False。

http://img1.sycdn.imooc.com//climg/5dd0ab4b091a8ec603420133.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。


  • xiaoyuan1 提问者 #1
    老师您说,not self.description为False。 if not self.description: return True 为什么会返回True
    2019-11-17 17:36:37
  • 好帮手乔木 回复 提问者 xiaoyuan1 #2
    同学你好:not self.description为False表示description存在因此返回 True。如果我解决了同学的问题,请采纳!学习愉快^_^。
    2019-11-18 09:49:05
好帮手慕美 2019-11-07 13:57:09

同学,你好。

1、实例方法modify_des ( )。功能:判断类属性description是否存在。同学判断的是输入的brand在不在description里。

http://img1.sycdn.imooc.com//climg/5dc3b0ab0943da1f03550135.jpg

2、视频的例子中name为实例属性,cls为Cat类,实例属性只能用实例来调用,不能使用类名来调用,因此会报错。本题中,description为类属性,可以使用类名和实例来调用,因此可以使用直接使用cls.description来调用。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 xiaoyuan1 #1
    # 自定义该类的基本车型检索方法 def modify_des(self): if not self.description: return True return '请输入您的车辆描述' 老师,您给写的这段代码我有点没看懂,if是当条件成立时,执行下面的语句,也就是说self.description为假时,也就是说self.description为空的时候,即不存在的时候,但是题目要求:判断类属性description是否存在,若存在,直接返回;
    2019-11-16 15:24:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师