鱼C论坛

 找回密码
 立即注册
查看: 1307|回复: 9

[已解决]面向对象作业题 - 公园票价计算

[复制链接]
发表于 2018-2-8 14:53:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我把题目修改了一下变成这样:

公园1的成人票价是100元,周末票价是平时票价的1.2倍,儿童票都半价
公园2的成人票价是200元,周末也是1.2倍票价,儿童也是半价

现在我想把公园1作为父类,公园2可以继承公园1的计价方式,只是修改门票原价

公园1写出来的代码如下:
  1. class Park1():
  2.     def __init__(self,weekend = False, child = False):
  3.         self.exp = 100   #公园正常成人票
  4.         if weekend:
  5.             self.inc = 1.2
  6.         else:
  7.             self.inc = 1
  8.         if child:
  9.             self.discount = 0.5
  10.         else:
  11.             self.discount = 1

  12.     def calcprice(self,num):
  13.         return self.exp * self.inc * self.discount * num
复制代码


但是在写公园2的代码的时候,不知道如何继承公园1的计价方式:

  1. class Park2(Park1):
  2.     def __init__(self, weekend = False, child = False):
  3.         Park1.__init__(self)
  4.         self.exp = 200
  5.         pass

  6. parent = Park2()
  7. child = Park2(child = True)
复制代码


没有很明白__init__的用法和pass的用法,大神可以麻烦解释一下吗?代码如何修改?

谢谢!!
最佳答案
2018-2-8 15:55:31
  1. Park1.__init__(self)
复制代码

换成
  1. Park1.__init__(self,weekend,child)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-8 15:07:41 | 显示全部楼层
1.你继承公园1类。公园2类就有公园1类的方法了。所以你的公园2类已经有公园1类的计价方法了。
2.__init__方法是对你的实例对象的初始化吧。
3.pass 是一个占位符,相当于占个位置而已,不妨碍程序运行,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-8 15:10:21 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-8 15:07
1.你继承公园1类。公园2类就有公园1类的方法了。所以你的公园2类已经有公园1类的计价方法了。
2.__init__ ...

感觉我公园2这样写不对,我尝试了一下跑print(child.calcprice(1)),看看公园2的儿童票价会不会等于100,结果还是200,貌似计价方式没有继承到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 15:17:04 | 显示全部楼层
heywilliam 发表于 2018-2-8 15:10
感觉我公园2这样写不对,我尝试了一下跑print(child.calcprice(1)),看看公园2的儿童票价会不会等于100, ...

没有继承到的话,你又没有在公园2类里写计价方法, child.calcprice(1) 会报错的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-2-8 15:23:16 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-8 15:17
没有继承到的话,你又没有在公园2类里写计价方法, child.calcprice(1) 会报错的。

这样跑没有报错耶,只是还是200块儿童票,不知道为什么没有继承到公园1的计价方式

  1. class Park1():
  2.     def __init__(self,weekend = False, child = False):
  3.         self.exp = 100
  4.         if weekend:
  5.             self.inc = 1.2
  6.         else:
  7.             self.inc = 1
  8.         if child:
  9.             self.discount = 0.5
  10.         else:
  11.             self.discount = 1

  12.     def calcprice(self,num):
  13.         return self.exp * self.inc * self.discount * num



  14. class Park2(Park1):
  15.     def __init__(self, weekend = False, child = False):
  16.         Park1.__init__(self)
  17.         self.exp = 200
  18.         pass

  19. parent = Park2()
  20. child = Park2(child = True)

  21. print(child.calcprice(1))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 15:30:39 | 显示全部楼层
heywilliam 发表于 2018-2-8 15:23
这样跑没有报错耶,只是还是200块儿童票,不知道为什么没有继承到公园1的计价方式

就是因为没有报错才说你公园2继承了公园2的计价方法啊,不然你以为公园2的计价方法从哪里来的啊,你又没有再公园2里面写计价方法。
这里的问题应该是你的__init__方法的原因,可是我还没弄明白是什么原因。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-8 15:34:12 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-8 15:30
就是因为没有报错才说你公园2继承了公园2的计价方法啊,不然你以为公园2的计价方法从哪里来的啊,你又没 ...

啊?我还需要再把计价方法再抄一遍到公园2吗,不能有方法直接继承公园1吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 15:41:50 | 显示全部楼层
heywilliam 发表于 2018-2-8 15:34
啊?我还需要再把计价方法再抄一遍到公园2吗,不能有方法直接继承公园1吗

我都说了公园2现在已经继承了这个计价方法了。
不是计价方法的问题,是__init__方法的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 15:55:31 | 显示全部楼层    本楼为最佳答案   
  1. Park1.__init__(self)
复制代码

换成
  1. Park1.__init__(self,weekend,child)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-8 16:44:45 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-7 11:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表