在Python中访问父类的静态类变量

fue*_*zig 3 python inheritance class static-variables

我喜欢这样的

class A:
  __a = 0
  def __init__(self):
    A.__a = A.__a + 1
  def a(self):
    return A.__a

class B(A):
  def __init__(self):
    # how can I access / modify A.__a here?
    A.__a = A.__a + 1 # does not work
  def a(self):
    return A.__a
Run Code Online (Sandbox Code Playgroud)

我可以访问__a类变量B吗?这可能是写作a而不是__a,这是唯一的方法吗?(我猜答案可能很短:是的:)

Mat*_*son 7

所以,__a它不是一个静态变量,它是一个类变量.而且由于双重前导下划线,它是一个名称受损的变量.也就是说,为了使它成为伪私有,它被自动重命名为_<classname>__<variablename>而不是__<variablename>.它仍然可以被该类的实例访问,因为__<variablename>子类没有得到这种特殊处理.

我建议您不要使用双前导下划线,只使用一个下划线(a)标记它是私有的,以及(b)避免名称重整.