定义类,__init__的作用是什么?
本帖最后由 sonichuang 于 2018-9-10 23:39 编辑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))
static/image/hrline/line4.png
static/image/hrline/line4.png
这段代码如果不用__init__可以写成这样:
class Ticket:
default = 100
def final(self, num, weekend = False, child = False):
if weekend == True:
self.rise = 1.2
else:
self.rise = 1
if child == True:
self.discount = 0.5
else:
self.discount = 1
return self.default * self.rise * self.discount * num
adult = Ticket()
child = Ticket()
print(adult.final(2) + child.final(1, child = True))
__init__在代码中有什么呢?
在声明一个类对象的时候就完成初始化工作 BngThea 发表于 2018-9-11 08:13
在声明一个类对象的时候就完成初始化工作
进行初始化操作有什么好处呢? sonichuang 发表于 2018-9-11 08:23
进行初始化操作有什么好处呢?
实际应用中的绝大多数时候,我们在生成一个类对象的时候希望它的原始功能就已经具备了 你即使没有写,仍然调用了这个函数,这样写的好处一是规范,二是可以在创建对象的同时向里面传入参数,设置属性
如果不这样写,你的属性是默认的,不能改的,除非再写一个专门修改参数的函数! RIXO 发表于 2018-9-11 14:41
你即使没有写,仍然调用了这个函数,这样写的好处一是规范,二是可以在创建对象的同时向里面传入参数,设置 ...
你好,能不能帮忙结合我的这个例子说明一下,”如果不这样写,你的属性是默认的,不能改的,除非再写一个专门修改参数的函数!” sonichuang 发表于 2018-9-11 17:41
你好,能不能帮忙结合我的这个例子说明一下,”如果不这样写,你的属性是默认的,不能改的,除非再写一个 ...
这个原先的代码是这样的
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函数就是提供一个可以让你调整属性的方法
代码少的时候不重要,代码多的时候就会变得很重要,就需要规范了
页:
[1]