【问题标题】:Object-Oriented Programming Accessing functions within a class without parameters(python)面向对象编程在没有参数的类中访问函数(python)
【发布时间】:2017-04-23 08:36:09
【问题描述】:

编辑:我希望这更清楚我的担忧。 我知道对于我正在寻求答案的问题,这有很多信息。此外,expressMeal 和 megaMeal 位于两个不同的文件中。用户必须输入 1 或 2,我想用它来调用实例变量。 我的问题是粗体的,其余的是这个程序的一些背景

首先,如果这令人困惑或我没有说清楚,我想道歉。这是我第一次在 stackoverflow.com 上写作。

我要写一个关于快餐店的python程序。它有两种餐食供顾客选择。快餐包括肉类和配菜。大餐包括肉类、配菜、饮料和甜点。在这两个文件中 init 方法只假设有 self 参数。我还必须定义一个 chooseMeat 方法来选择肉类,一个 chooseSide 方法来选择侧面项目,以及一个 displayOrder 方法来显示订购的项目。这就是我到目前为止所做的。

>class ExpressMeal:
>>   def __init__(self):
>>>      self._meat = ' '
         self._side = ' '
     def chooseMeat(self):       
         return self._meat
     def chooseSide(self):
         return self._side
     def displayOrder(self):

在两个文件中 init 方法只有 self 参数。我必须使用此构造函数将实例变量初始化为空字符串。我必须调用 ExpressMeal 构造函数。另外,我想调用 将 ExpressMeal 类的 displayOrder 方法添加到此文件中。我该怎么做?我提前道歉,因为我无法在这方面做太多工作,因为我不明白如何使 expressMeal.py 工作。

from expressMeal import ExpressMeal
class MegaMeal(ExpressMeal):
    def __init__(self):
         base = super()
         self._drink = ' '
         self._dessert = ' '

我必须将 megaMeal.py 导入到主模块文件并要求用户选择 Express Meal 或 Mega Meal。 我还必须创建适当的对象并调用其方法来输入和显示客户选择的项目。我怎样才能做到这一点我卡住了。我不明白我应该如何将变量(对于 expressMeal 只是肉和侧面,但对于 megaMeal 我必须调用肉、侧面、饮料和甜点)到主模块,如果 __init__ 只假设有自参数,仅此而已。这可能吗? 下面显示了在此程序上运行的示例

Enter 1 for express meal Enter 2 for mega meal: 1 You chose express meal Enter 1 for chicken sandwich Enter 2 for cheese burger: 2 Enter 1 for fries Enter 2 for chips: 1 Items ordered: cheese burger fries

程序完成后应该像这样执行 我并不是要求它完全为我完成。但是,如果我能获得有关如何使其与示例一起使用的帮助。非常感谢任何帮助。提前谢谢你。

【问题讨论】:

  • 我想chooseMeatchooseSide 应该在类中设置肉类和侧面值,而不是返回值
  • 只是对您的问题的一些建议:您有很多不相关的细节,很难确定什么是重要的,什么不是。在我理解只有最后一段包含您所要求的内容的重要信息之前,我必须阅读整本书 3 遍。
  • 我还没有阅读你所有的问题,但是这个“init 只是假设有 self 参数,没有别的。”是不正确的!您可以使用任意多个参数调用 init,只要第一个是 self。
  • 对此我深表歉意,我试图尽可能清楚,但结果却是最糟糕的。 @Ni 根据该程序的说明,“init 仅假设具有 self 参数”。

标签: python class oop parameters abstract-class


【解决方案1】:

在 Python 中,“官方”正常方式是(在 Python 3 中)

class MegaMeal(ExpressMeal):
    def __init__(self):
        super().__init__()
        self._drink = ' '
        self._dessert = ' '

对于同时适用于 Python 3 和 2 并且 IMO 需要较少“魔法”来理解的方式,将 super 调用替换为

ExpressMeal.__init__(self)

在我看来,super 使用 Python 2 太令人困惑了,以你的水平无法理解(甚至只是记住),所以别管它了。我认识快乐高效的 Python 程序员,他们甚至不知道super 的存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2021-07-30
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    相关资源
    最近更新 更多