WXF666 发表于 2019-12-19 11:20:11

如何解决该报错

class Tickets:
    normal_adult = 100
    weekd_adult = 120
    normal_child = 50
    weekd_child = 60
    def cal(num_adult, num_child, weekend):
      if weekend == 0:
            print('%d 个成人 + %d 个小孩周末票价为:%.2f' % (num_adult, num_child, num_adult * normal_adult + num_child * normal_child))
            
      else:
            print('%d 个成人 + %d 个小孩平日票价为:%.2f' % (num_adult, num_child,num_adult * weekd_adult + num_child * weekd_child))

a = Tickets()
weekend =0
num_adult = 2
num_child = 1
a.cal(num_adult, num_child, weekend)

####a.cal(num_adult, num_child, weekend)
TypeError: cal() takes 3 positional arguments but 4 were given

ba21 发表于 2019-12-19 12:42:25

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。

class Tickets:
    normal_adult = 100
    weekd_adult = 120
    normal_child = 50
    weekd_child = 60
    def cal(self, num_adult, num_child, weekend):
      if weekend == 0:
            print('%d 个成人 + %d 个小孩周末票价为:%.2f' % (num_adult, num_child, num_adult * self.normal_adult + num_child * self.normal_child))
            
      else:
            print('%d 个成人 + %d 个小孩平日票价为:%.2f' % (num_adult, num_child,num_adult * weekd_adult + num_child * weekd_child))

a = Tickets()
weekend =0
num_adult = 2
num_child = 1
a.cal(num_adult, num_child, weekend)

gywjj 发表于 2019-12-19 13:11:53

这样改了还是有个小问题,self.normal_adult这个没有被参数传递,会出错,对函数还要进行修改才行

WXF666 发表于 2019-12-19 17:42:23

ba21 发表于 2019-12-19 12:42
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参 ...

运行出来了,但是有点不明白为什么a.cal(num_adult, num_child, weekend)不需要加self?加了self反而报错了
页: [1]
查看完整版本: 如何解决该报错