我试图理解在python3中类继承是如何工作的,特别是私有字段如何与本地和继承的方法交互。下面是一些例子来说明这个问题。在
首先,如果超类中的一个变量var是公共的,那么子类中的任何方法也可以更改它:class Superclass:
var = 1
def getVar(self):
print(self.var)
class Subclass(Superclass):
def __init__(self):
self.var = 123
my_object = Subclass()
my_object.getVar() # outputs 123
如果超类中的变量__var是私有的,则任何继承的方法都将忽略子类所做的修改:
^{pr2}$
子类中的局部方法可以更改它:class Superclass:
__var = 1
class Subclass(Superclass):
def __init__(self):
self.__var = 123
def getVar(self):
print(self.__var)
my_object = Subclass()
my_object.getVar() # outputs 123
但是为了使用带有改变值的继承方法,我必须在子类中使用self._Superclass__var而不是{}:class Superclass:
__var = 1
def getVar(self):
print(self.__var)
class Subclass(Superclass):
def __init__(self):
self._Superclass__var = 123
my_object = Subclass()
my_object.getVar() # outputs 123
为什么会这样?私有字段不是由子类继承的,因此Subclass中的变量self.__var与{}内的变量self.__var指向的值不同吗?在