super()如何使用私有变量?

时间:2016-01-17 18:02:56

标签: python-3.x

python 3.5上有一个有趣的问题。例如,我喜欢:

class A:
  __x = 0
  def __init__(self, x):
    self.__x = x

  def set_x(self,x): __x=x
  def get_x(self): return x

class B(A):
  __y = 0
  def __init(self, x, y)
    self.__y = y
    super(B, self).__init__(x)

  def set_y(self,y): __y=y
  def get_y(self): return y

  def toString(self): return "x = {} and y = {}".format(self.__x,
                                                        self.__y); 
test = B(7,3)
test.toString()

为什么我在这里有错误:“B对象没有属性_B__x”,如果方法super()让我使用parante类的所有方法?

当然,如果我写,如:

def toString(self): return "x = {} and y = {}".format(self.get_x(),
                                                      self.__y); 

效果很好!

1 个答案:

答案 0 :(得分:0)

您无法通过super()访问私有变量/成员。 因此,为了访问B .__ x,您必须执行

def toString(self): return "x = {} and y = {}".format(self._B__x,
                                                    self.__y);