关于静态与父类方法的问题

来源:3-7 编程练习

为学习而奋斗

2019-12-21 19:17:00

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.description:
           return self.description
       else:
           return '请输入您的车辆描述'
# 自定义静态方法 提示用户:‘已完成车辆基本参数信息的录入!’
   @staticmethod
   def basic_parameters():
       print("已完成车辆基本参数信息的录入!")

# 自定义类方法 根据用户车辆的品牌给出相应的合理保养建议
   @classmethod
   def upkeep(cls,desc):
       if desc in cls.description:
           print("根据汽车保养的相关经验,{}品牌的车应于5000km/次的频率进行专业性保养".format(desc))
       else:
           print("非常抱歉!{}品牌不在我们的保养范围内".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('大众')
   # 当if语句的判断条件不成立时,打印输出并提示用户:‘请正确填写相关的车辆信息’
   else:
       print("请正确填写相关的车辆信息")
if __name__ == "__main__":

   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('保时捷')
   # 当if语句的判断条件不成立时,打印输出并提示用户:‘请正确填写相关的车辆信息’
   else:
       print("请正确填写相关的车辆信息")


老师,我这样的代码,没有问题吧?

还有老师,我想问一下,

@classmethod
def upkeep(cls,desc):
   if desc in cls.description:
       print("根据汽车保养的相关经验,{}品牌的车应于5000km/次的频率进行专业性保养".format(desc))
   else:
       print("非常抱歉!{}品牌不在我们的保养范围内".format(desc))

这个地方的.format(desc)为什么最后输出的是desc啊,为什么我之前用self.brand的时候就是显示不出self这个出来,还报错?

还有为什么我后来换成cls.brand也不行,偏偏用desc就可以了,这是为什么?

http://img.mukewang.com/climg/5dfdff060958071d08100205.jpg

http://img.mukewang.com/climg/5dfdff0609f13c7108010179.jpg

http://img.mukewang.com/climg/5dfdff1c09b7739410610153.jpg

http://img.mukewang.com/climg/5dfdff1c0989241c09360193.jpg

http://img.mukewang.com/climg/5dfdff1c09e5a98e10730147.jpg


写回答

1回答

时间,

2019-12-22

同学,你好。同学的代码是可以的。brand为实例属性,静态方法是不能调用实例属性的,该方法中没有self,因此会报错。desc是类属性中的参数,因此时在输出时是可以的。

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

0

0 学习 · 8160 问题

查看课程