【问题标题】:Python Classes and Inheritance [closed]Python类和继承[关闭]
【发布时间】:2014-05-02 20:27:12
【问题描述】:

我正在学习 Python 编程,但我很难理解继承。我的任务是:

  1. 创建一个 Division 和 Department 类。
  2. 创建一个名为“getList()”的方法,该方法将显示一条消息“The 部门有全职全职和兼职兼职 导师。”
  3. 在“Department”类中,将 12 作为值分配给 fullTime 变量,将 27 分配给 partTime,将“CIS”分配给部门。不要创建 “部门”类中的任何方法。和
  4. 创建名为“Department”类的实例(对象) “我的部门”。使用这个“myDept”对象调用“getList()”方法 “Division”类(通过继承)。

这是我目前所拥有的。

    class Division():
        def __init__(self, dept, fullTime, partTime):
            self.dept = dept
            self.fullTime = fullTime
            self.partTime = partTime

        def getList(self):
            return "The (0) department has (1) full-time and (2) part-time instructors.".format(self.dept, self.fullTime, self.partTime)

    class Department(Division):

        myDept = Division(CIS247, 12, 27)

【问题讨论】:

  • 那么...你有什么问题?
  • an instance (object) of the “Department” class named “myDept”. 你的myDeptDivision 的一个实例。此外,出于某种原因,它位于Departement 中(它可能不应该)。 call the getList() method 对我来说似乎很直接?
  • 究竟是什么问题?您似乎混淆了继承和组合:Department 不应包含 Division;它一个。
  • 我的问题是,我是否在说明中的第 1 部分和第 2 部分的写入轨道上?我很难理解如何为变量赋值,然后如何创建myDept 实例来调用getList()

标签: python class inheritance


【解决方案1】:
class Division(object):
    def __init__(self,dept, fullTime, partTime):
        self.fullTime = fullTime
        self.partTime = partTime
        self.dept=dept
    def getList(self):
      return "The {0} department has {1} full-time and {2} part-time instructors.".format(self.dept, self.fullTime, self.partTime)

class Department(Division):
    pass
myDept = Department("CIS",12,37)
print myDept.getList()

已编辑,我错过了“CIS”,对于字符串格式,您使用 {} 而不是 ()。 另外“不要在“部门”类中创建任何方法。”所以删除了init方法。

python classes tutorial

【讨论】:

  • class Division() 是一个老式的对象。另外,永远不要从子班打电话给ParentClass.method。请改用super!无论如何,Department.__init__ 不会做任何 Division.__init__ 不会做的事情,所以不要费心重写它。
  • @KirkStrauser 我编辑了答案。从孩子那里调用 ParentClass.method 有什么问题?我一直在阅读 Mark Lutz 编程 Python,他指出使用 super 会破坏与旧样式类的向后兼容性并且存在多重继承问题,您对此有何看法,这是我一直困惑的问题?
  • @PadraicCunningham, @KirkStrauser - 感谢您的意见和帮助。我想了解更多关于类和继承的内容,以便了解您是如何在 Department 类中编写代码的。同时,在这两个示例中,我在print myDept.getList() 上都收到了invalid syntax 错误
  • @CoPoPHP 您可能正在使用 Python 3。将其更改为 print(myDept.getList())
  • @PadraicCunningham super() 是我们解决多重继承问题的方法。 :-) 此外,旧式课程非常罕见,您不必担心它们。请参阅 Raymond Hettinger 的Python's super() considered super!(您可以认为他是这类东西的权威)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2013-08-04
  • 2021-09-06
相关资源
最近更新 更多