当前位置: 首页 > 知识库问答 >
问题:

如何在Python中调用派生类中同名方法的基类方法?

燕嘉熙
2023-03-14

代码:-

class Animal():
        
    def __init__(self) -> None:
        print("Animal Created")
        
            
    def eat(self):
        print("Animal Eating")
            
class Dog(Animal):
    
    def __init__(self) -> None:
        # Animal.__init__(self)
        print ("Dog Created")
        
    def eat(self):
        print("Dog Eating")
    
mydog = Dog()
mydog.eat()

在这里,当我用mydog对象调用eat()方法时,它会打印出“dog eating”,有没有办法用mydog对象调用base Animal类的eat()方法,比如有没有像这样的东西

mydog.Animal.eat() or mydog.eat(Animal)

我不想使用super(),因为这样它也会从child类调用eat(),所以它会同时打印语句“animal eating”和“dog eating”,这是我不想要的,我想一次只调用一个语句。

共有1个答案

皇甫智明
2023-03-14

是的,您可以直接调用animaleat方法,将对象作为参数传递。

Animal.eat(mydog)

但如果给这些方法起不同的名字,代码就不会那么混乱了。

 类似资料:
  • 问题内容: 我有两个Java类:B,它扩展了另一个类A,如下所示: 我想打电话给。我来自C++界,我不知道如何用Java做这个基本的事情。 问题答案: 您要寻找的关键字是。例如,请参阅本指南。

  • 问题内容: 因此,此代码的输出为。现在,我想到了一个问题:作为 派生 类对象的 po 怎么能调用作为基类的 PrivateOverride 的私有方法? 问题答案: 因为您在类中定义了main方法。如果将main方法放在Derived类中,它将无法编译,因为在该类中不可见。 class中的po.f()调用不是多态的,因为in 类为,所以in class中的值不会被覆盖。

  • 问题内容: 我有以下代码片段: 执行代码时出现异常: 我不明白为什么会有和例外。有人可以帮助我理解吗? 您可以在此处检查代码。 问题答案: 创建一个对象,这意味着首先调用其超类构造函数,然后依次调用-但您已覆盖它,因此它是该方法的子版本。在该方法中,您调用尚未初始化的。 结论:在构造函数中调用可重写方法几乎从来不是一个好主意。

  • 如果基类A有一个“public synchronized void method(){}”没有被它的派生类B重写,那么用来访问类B中的synchronized方法的锁是什么(即是派生类对象还是基类对象)?

  • 我可以写: 但这当然不起作用,因为调用返回的是而不是我想要的。 我可以通过在(以及和等)中键入类型并抑制警告来避免这个问题,但是即使只有(比方说)10个扩展的实体类,这仍然是为了键入而编写的样板代码。此外,我认为,如果我必须为每个派生类编写代码(无论多么小)(也会有其他类似的方法),那么拥有类层次结构的好处就会丧失很多。 对此有更好的解决方案吗? 更新:使用Java7。

  • 问题内容: 我在这里超负荷工作,但是请耐心等待这位Python业余爱好者。我是一名从事贸易的PHP开发人员,以前几乎没有接触过这种语言。 我想做的是在类中调用方法…听起来很简单?对于“自我”是什么,以及在类内和类外调用这种方法的正确过程,我完全感到困惑。 有人 可以 向我 解释 如何用变量调用方法。我曾尝试在多个“学习python”站点上进行研究,并在StackOverflow上进行搜索,但无济于