python继承类的特定练习

时间:2018-07-18 06:20:19

标签: python inheritance

我有一个Pet类,我需要定义两个类CatDogCat类继承自Pet和{{ 1}}类需要与Dog一起使用,这将打印eat_cat()。这是给定的代码:

dog_name has eaten cat_name

1 个答案:

答案 0 :(得分:0)

必填项:http://idownvotedbecau.se/noattempt/

首先,欢迎来到SO!在询问之前,您需要先尝试一下,因为我们不在这里做您的工作。

但是,我的心情非常好,因此我只会帮助您了解Pet班级的建立方式,以便您可以尝试一下自己,我会为您提供基本信息,以免让您不完整地列出术语,因为我觉得就像您是编程新手一样。

所以,我们开始吧:

class Pet:
"""
Pretty straight forward, you create a new class named "Pet", it inherits nothing
(10secs of web searching will tell you how to inherit in python).
"""
   def __init__(self, name, eats):
   """
   This method is called a magic method and is called whenever you create an object
   A.K.A when you do x = Pet("Cortex", "Cheese")
   """

      # Here you define the properties of your object, your pet will have
      # a name and what it eats.
      self.name = name
      self.eats = eats

为了简便起见,我没有在代码块中放置很多信息。

__ init__魔术方法

当您调用(创建)一个类对象(此处为Pet)时,该方法将被自动调用并执行。

自我关键字

self将成为您实现的每个类方法的第一个参数,它表示该类的当前实例。

自我与其他事物之间的点

好吧,这就是您访问Python对象中内容的方式。

如果您的计算机上安装了IPython,建议您打开它,因为它可以帮助您了解对象内部的内容。

class MyClass():
    def __init__(self):
        self.variable1 = "foo"
        self.variable2 = "bar"
        self._variable3 = "baz"

    def get_variable3(self):
        return self._variable3

如果没有IPython,请参见以下屏幕截图: ipython screenshot if needed

在点后按Tab键后,您可以看到对象内部的内容。您可以看到variable1variable2和方法get_variable3

a = MyClass()
a.variable1 # will return "foo"
a.variable2 # will return "bar"
a.get_variable3() # will return "baz"

如果您想知道为什么看不到_variable3是因为我在其名称前添加了_并将其隐藏,这就是为什么我创建了一种查看它的方法。

>

继承

我知道我说过我不会帮助您继承遗产,但我仍然在这里。

超短说明:

继承是从父类中获取所有内容,并将其放入子类中。

如果我参加之前创建的课程:

class MyChildClass(MyClass):
"""
This is how you specify inheritance, just put the parent class in the brackets
"""
    pass # the keyword for "do literally nothing"

然后,如果您创建此类的实例并查看其中的内容:

ipython screenshot

是的,这是相同的,父类(MyClass)中的所有内容都放在子类中。

但是,这是没有用的。问题是您可以在子类中定义特定于其的方法:

ipython screenshot mclass override

在这里,我在子类中定义了两个方法。您可以看到我重新定义了get_variable3来返回variable1(无论出于何种原因),这意味着MyChildClass对象在调用此方法时将返回“ foo”(variable1中的值),而MyClass对象将返回“ baz”。

我还创建了一个全新的方法,该方法仅存在于MyChildClass中,而不存在于MyClass中。


在您的代码中提到dog.eat_cat(cat),从现在起您将了解到,这是dog对象内部的一个带有参数的方法。

我不是最擅长于解释事物,所以我希望这可以帮助您至少掌握基础知识。