[课后作业] 第037讲:类和对象:面向对象编程 | 课后测试题及答案 动动手第0题求助
class Tickets:adult_price = 100
now_adult = 120
child_price =50
new_child = 60
def __init__(self,adult,child):
self.adult = adult
self.child = child
def date_money(self):
day = input('请输入是否为工作日:Yes/No')
self.adult = int(input('请输入成年人数量:'))
self.child = int(input('请输入小孩数量:'))
if day == 'YES' or 'Yes' or 'yeS' or 'yES':
sun = self.adult_price * self.adult + self.child_price *self.child
print('%d个成年人和%d个小孩的票价总计为:'%(self.adult,self.child)+ str(sun))
else:
sun = self.now_adult * self.adult + self.new_child * self.child
print('%d个成年人和%d个小孩的票价总计为:' % (self.adult, self.child) + str(sun))
price1= Tickets()
price1.date_money()
1、请问,为什么我这个 def __init__(self,adult,child):会显示:
TypeError: __init__() missing 2 required positional arguments: 'adult' and 'child' 这个错误
2、初始化函数在什么情况下使用?
3、定义了一个类并且初始化_init__参数之后,在实例化对象后是否一定要传入参数?如:
class Tickets:
def __init__(self,adult,child):
self.adult = adult
self.child = child
price1= Tickets() ,这里是否一定要传入参数? 有什么办法直接实例化一个对象,不需要在括号里加入参数? 1. 在你的代码中,初始化函数`__init__(self, adult, child)`需要两个参数`adult`和`child`,但是在实例化对象`price1=Tickets()`时没有传入这两个参数,所以出现了错误提示。为了解决这个问题,你可以在实例化对象时传入参数,如`price1 = Tickets(2, 3)`,其中2表示成年人数量,3表示小孩数量。
2. 初始化函数`__init__`用于对类的实例进行必要的初始化操作。当你创建一个对象时,初始化函数会自动调用,并且它允许你在创建对象时传递参数。
3. 在你的代码中,如果你想实例化一个`Tickets`对象,必须传入`adult`和`child`参数。但是如果你希望有一个默认值或者在实例化对象时不需要传入参数,你可以在初始化函数中给参数设置默认值。例如:
class Tickets:
def __init__(self, adult=0, child=0):
self.adult = adult
self.child = child
price1 = Tickets()
在这个例子中,`adult`和`child`参数都有默认值为0,所以你可以直接实例化一个`Tickets`对象,无需传入参数。
希望这些解答能帮到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2024-4-15 12:08 编辑
只要为 __init__() 新增可选参数即可解决问题。
class Tickets:
adult_price = 100
now_adult = 120
child_price = 50
new_child = 60
sun = False
def __init__(self , adult = 120 , child = 60 , sun = False):# 为 __init__() 增加 3 个可选参数
self . adult = adult # 如果不指定,那么,self . adult 的缺省值是 120
self . child = child # 如果不指定,那么,self . child 的缺省值是60
self . sun = sun # 如果不指定,那么,self . sun 的缺省值是False (也就是工作日)
def date_money(self):
if self . sun :
sun = self . adult_price * self . adult + self . child_price *self . child
print('%d个成年人和 %d个小孩非工作日的票价总计为:' % (self . adult , self . child) + str(sun))
else:
sun = self . now_adult * self . adult + self . new_child * self . child
print('%d个成年人和%d个小孩工作日的票价总计为:' % (self . adult , self . child) + str(sun))
price1 = Tickets() # 用缺省值新建 Tickets 的对象 price1
price1 . date_money()
price2 = Tickets(30 , 130) # 用 adult = 30 , child = 130 , sun = False 新建Tickets 的对象 price2
price2 . date_money()
price3 = Tickets(child = 20 ,sun = True , adult = 10) # 用 adult = 10 , child = 20 , sun = True 新建Tickets 的对象 price3
price3 . date_money()
jackz007 发表于 2024-4-15 10:31
只要为 __init__() 新增可选参数即可解决问题。
收到!原来要传入一个默认值,感谢大神 我悟了 15779327169 发表于 2024-4-15 12:43
收到!原来要传入一个默认值,感谢大神 我悟了
你这是求助贴,如果问题得到了解决,应该选出“最佳答案”,求助应该有始有终。 jackz007 发表于 2024-4-15 13:55
你这是求助贴,如果问题得到了解决,应该选出“最佳答案”,求助应该有始有终。
好嘞!
页:
[1]