【问题标题】:Python way of accessing superclass members from a subclass object从子类对象访问超类成员的 Python 方法
【发布时间】:2020-06-29 09:16:56
【问题描述】:

注意:我发现这是一个重复的答案,并且是另一个线程中的附加答案,所以我链接到它以防你想同时查看。

Calling base class method in Python

注意:由于未正确说明所需内容,此问题的标题已更改。上一个标题是:将子类转换为超类的 Python 等效方法

我试图弄清楚如何模拟(因为据我所知 Python 不支持它)类对象转换。例如,假设我有 2 个类,sup 和 sub:

class sup()
 ...
 def method(self):
     ...

class sub(sup):
 ...
 def method(self):
     ...

我知道,由于方法存在于超类和子类中,它将被覆盖。但我想实现这样的目标:

sub obj()
((sup) sub).method()

为了调用超类方法而不是子类方法。在Java中我会这样做,但是我已经阅读并且python没有这个功能(如果我错了,请纠正我,这是我到目前为止所调查的)所以我正在寻找一种等效的方法来做这个.

【问题讨论】:

  • sup.method(obj).,恕我直言
  • 我认为((sup) sub).method() 也不会跳过 Java 中的子实现,据我所知,这不是强制转换的工作方式。您能否提供一些context,您实际上想在这里做什么?为什么要跳过子实现?您在寻找例如super?
  • @jonrsharpe:在 C# 中它只会调用基本方法(如果未定义为虚拟方法)
  • @DarrylG:我认为 OP 不想从子类调用它,而是从子类外部的代码调用它

标签: python subclass superclass


【解决方案1】:

您可以将当前对象传递给基类:

o = sub()
sup.method(o) # this will call method of the base class

另一个提示:在 python 中,以大写形式编写类型是很常见的,因此在您的示例SubSup 中,请参阅PEP8

【讨论】:

  • 谢谢@Alexander Kosik。我显然还没有完全理解 self 的工作方式。我现在明白了。我已将此标记为答案。还要感谢您指出 PEP8,虽然我还没有深入研究 python,但无论如何我应该用大写字母写它,也感谢您指出这一点。
猜你喜欢
  • 2017-09-13
  • 2019-06-10
  • 2012-12-01
  • 2016-01-16
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2018-06-03
  • 2022-11-30
相关资源
最近更新 更多