这个原先的代码是这样的
- class Ticket:
- def __init__(self, weekend = False, child = False):
- self.default = 100
- if weekend:
- self.rise = 1.2
- else:
- self.rise = 1
- if child:
- self.discount = 0.5
- else:
- self.discount = 1
- def final(self, num):
- return self.default * self.rise * self.discount * num
- adult = Ticket()
- child = Ticket(child = True)
- print(adult.final(2) + child.final(1))
复制代码
这个应该是答案里面的代码吧,你看现在他调用child实例的时候输入了参数child = True,这样在接下来的这个类中所有函数都可以知道这个参数,但是你的第二个代码,是在函数中设置默认参数,就意味着,我每次调用你的函数,我不仅得记忆你每个函数里面有些什么参数,还得再输一遍,就比如说现在出现了第三个函数,儿童可以额外参加什么活动,儿童可以抽奖,你就必须在后面两个函数调用的时候再输入一遍child = True
属性不能改变不是你这个例子里面的这个例子的self.default = 100,就已经确定了
正确的写法是下面这样
def __init__(self, default=100,weekend = False, child = False):
self.default = default
这样创建类的时候,你的默认票价是可以随时改的
而你另一种写法是改不了的,动不了类的属性,init函数就是提供一个可以让你调整属性的方法
代码少的时候不重要,代码多的时候就会变得很重要,就需要规范了