Python虚拟方法没有破坏名称

时间:2017-04-24 07:04:40

标签: python python-3.x

我正在谈论的示例代码

class A:
  def __init__(self):
    self.x = 5
  def virtual__getX(self):
    return self.x
  def getY(self):
    return self.virtual__getX()+2

class B(A):
  def __init__(self):
    A.__init__(self)
  def virtual__getX(self):
    return 20

a=A()
b=B()

print(a.getY())
print(b.getY())

有没有一种方法在python 3中拥有真正的虚拟方法而没有这个真正糟糕的名字" virtual__getX"我需要明确的名字" __ getX"

Python 3.5.2 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux

7
22

如果我从名称中删除虚拟结果

Python 3.5.2 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux

7
7

是否有更好的方法来编写真正的虚拟方法,例如"普通语言"像delphi

1 个答案:

答案 0 :(得分:1)

您无法拥有名为__something的虚拟函数。以双下划线开头的属性被认为是私有的,而python在内部对它们应用了名称修改。

但是,您可以将virtual__getX重命名为getX,它可以按预期工作。