程序出现错误

程序出现错误

class Vehicle(object):
    trans_type = 'SUV'

    def __init__(self,speed,size):
        self.size = tuple(size)
        self.speed = int(speed)

    def show_info(self):
        print("我的所属类型为:{0},速度:{1}km/h,体积:{2}".format(self.trans_type,self.speed,self.size))

    def move(self):
        print("我已向前移动了50米")

    def set_speed(self,new_speed):
        self.set_speed = int(new_speed)

    def get_speed(self):
        print("我的时速为:{}km/h".format(self.set_speed))

    def speed_up(self):
        self.up_speed = self.set_speed + 15
        print("我的速度由{0}km/h提升到了{1}km/h".format(self.set_speed,self.up_speed))

    def speed_down(self):
        self.drop_speed = self.set_speed - 15
        print("我的速度由{0}km/h下降到了{1}km/h".format(self.set_speed,self.drop_speed))

    def transport_identify(self, a, b):
        if isinstance(a, b) == True:
            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.set_speed(50)
    tool_1.speed_down()
    tool_1.transport_identify(tool_1, Vehicle)

http://img1.sycdn.imooc.com//climg/5e47636f082fe71416000900.jpg老师,程序出现这种错误怎么修改,是什么原因造成的

正在回答 回答被采纳积分+1

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

4回答
Cismewhy 2020-02-24 14:13:27
class Vehicle(object):

# 自定义Vehicle类属性
    tag = "Vehicle"
    trans_type = "SUV"

# 自定义实例的初始化方法
    def __init__(self,speed,size):
        self.__speed = speed
        self.__size = size

# 自定义实例方法show_info,打印实例的速度和体积
    def show_info(self):
        res = "我的所属类型为{0},速度:{1}km/h,体积:{2}。".format(Vehicle.trans_type,self.__speed,self.__size)
        print(res)
        print("size",type(self.__size))
        return res

# 自定义实例方法move,打印“我已向前移动了50米”
    def move(self):
        print("我已向前移动50米。")
# 自定义实例方法set_speed,设置对应的速度值
    def set_speed(self,speed):
        self.__speed = speed
        return self.__speed

# 自定义实例方法get_speed,打印当前的速度值
    def get_speed(self):
        print("我的时速为{0}km/h".format(self.__speed))

# 自定义实例方法speed_up,实现对实例的加速
    def speed_up(self):
        up = self.__speed + 10
        print("我的时速由{0}km/h提升到了{1}km/h。".format(self.__speed,up))

# 自定义实例方法speed_down,实现对实例的减速
    def speed_down(self):
        down = self.__speed - 10
        print("我的时速由{0}km/h降低到了{1}km/h。".format(self.__speed,down))


# 自定义实例方法transport_identify,实现对实例所属类型的判断
    def transport_identify(self,trans):       # 即便所有class中的方法,都要与init中保持一致,添加self
        res = isinstance(trans,Vehicle)
        if res == True:
            print("类型匹配")
        else:
            print("类型不匹配")


if __name__ == "__main__":
    tool_1 = Vehicle(20, (3.6, 1.9, 1.75))

    # 调用实例方法 打印实例的速度和体积
    # print("我的类型为{0},".format(Vehicle.trans_type))
    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(tool_1)

这段代码相对规范,希望可以帮助到你。

好帮手乔木 2020-02-16 10:20:41

同学你好:

这是由于在set_speed方法中顶一个set_speed属性,导致第二次调用时,set_speed不是方法了,而是tool_1对象的属性,所以会报错。

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

注意:python是动态语言,所有的函数名或者变量的值都是会变的,因此要注意不要同名。

修改:将set_speed这个属性换个名称即可。

修改后的代码:

class Vehicle(object):
    trans_type = 'SUV'

    def __init__(self,speed,size):
        self.size = tuple(size)
        self.speed = int(speed)

    def show_info(self):
        print("我的所属类型为:{0},速度:{1}km/h,体积:{2}".format(self.trans_type,self.speed,self.size))

    def move(self):
        print("我已向前移动了50米")

    def set_speed(self,new_speed):
        # self.set_speed = int(new_speed)
        self.speed = int(new_speed)

    def get_speed(self):
        # print("我的时速为:{}km/h".format(self.set_speed))
        print("我的时速为:{}km/h".format(self.speed))

    def speed_up(self):
        # self.up_speed = self.set_speed + 15
        self.up_speed = self.speed + 15
        # print("我的速度由{0}km/h提升到了{1}km/h".format(self.set_speed,self.up_speed))
        print("我的速度由{0}km/h提升到了{1}km/h".format(self.speed,self.up_speed))

    def speed_down(self):
        # self.drop_speed = self.set_speed - 15
        self.drop_speed = self.speed - 15
        # print("我的速度由{0}km/h下降到了{1}km/h".format(self.set_speed,self.drop_speed))
        print("我的速度由{0}km/h下降到了{1}km/h".format(self.speed,self.drop_speed))

    def transport_identify(self, a, b):
        if isinstance(a, b) == True:
            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.set_speed(50)
    tool_1.speed_down()
    tool_1.transport_identify(tool_1, Vehicle)

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

  • 提问者 玖__ #1
    老师,也就是说,编写代码时候最好还是不要把函数名和属性名写成一样,以防止重复的方法调用会改变他们的函数与属性的值对吧,可以这么理解吗
    2020-02-16 10:37:48
  • 好帮手乔木 回复 提问者 玖__ #2
    同学你好:同学的理解是正确的,学习愉快^_^。
    2020-02-16 10:41:24
  • 提问者 玖__ #3
    出错的原因也就是,tool_1.set_speed(40),然后调用函数def set_speed(self,new_speed):传参数赋值,因为函数里我的属性名和函数名一样,我在调用tool_1.set_speed(50),set_speed()就变成了属性,tool_1对象的属性,所以会报错,老师理解的对吗
    2020-02-16 10:42:46
qq_默默不语_0 2020-02-15 13:04:24
class Vehicle(object):
    # 2、设置类属性trans_type(固定值为'SUV')和实例属性速度speed(int 类型,单位为 km/h)、体积size(tuple类型,单位为米。)
    trans_type = 'SUV'

    def __init__(self, speed, size):
        self.speed = int(speed)
        self.size = tuple(size)

    # 3、自定义方法 show_info( ),打印实例的所属类型和速度、体积的值;
    def show_info(self):
        print('该交通工具的类型:{},速度:{}km/h,体积:{}米'.format(self.trans_type, self.speed, self.size))

    def move(self):
        print('我已向前移动了50米')

    def set_speed(self, new_speed):
        self.speed = new_speed

    def get_speed(self):
        print('我的时速为:{}km/h'.format(self.speed))

    def speed_up(self):
        last_speed = self.speed
        self.speed += 10
        print('我的速度由{}km/h提升到了{}km/h'.format(last_speed, self.speed))

    def speed_down(self):
        last_speed = self.speed
        self.speed -= 15
        print('我的速度由{}km/h下降到了{}km/h'.format(last_speed, self.speed))

    def transport_identify(self, obj):
        if isinstance(obj, self.__class__):
            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.set_speed(50)
    tool_1.speed_down()
    tool_1.transport_identify(tool_1)

关键在于set_speed方法传入的参数,还有你设置的set_speed属性也不符合规范,在后面的章节中有@property属性你这个就和方法名冲突了

qq_默默不语_0 2020-02-15 12:59:51

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

   def __init__(self, speed, size):
       self.speed = int(speed)
       self.size = tuple(size)

   # 3、自定义方法 show_info( ),打印实例的所属类型和速度、体积的值;
   def show_info(self):
       print('该交通工具的类型:{},速度:{}km/h,体积:{}米'.format(self.trans_type, self.speed, self.size))

   def move(self):
       print('我已向前移动了50米')

   def set_speed(self, new_speed):
       self.speed = new_speed

   def get_speed(self):
       print('我的时速为:{}km/h'.format(self.speed))

   def speed_up(self):
       last_speed = self.speed
       self.speed += 10
       print('我的速度由{}km/h提升到了{}km/h'.format(last_speed, self.speed))

   def speed_down(self):
       last_speed = self.speed
       self.speed -= 15
       print('我的速度由{}km/h下降到了{}km/h'.format(last_speed, self.speed))

   def transport_identify(self, obj):
       if isinstance(obj, self.__class__):
           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.set_speed(50)
   tool_1.speed_down()
   tool_1.transport_identify(tool_1)

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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