Access static class variable of parent class in Python

后端 未结 3 2061
闹比i
闹比i 2021-01-06 04:29

I have someting like this

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

class B(A):
  def __init__(self):
          


        
相关标签:
3条回答
  • 2021-01-06 04:32

    So, __a isn't a static variable, it's a class variable. And because of the double leading underscore, it's a name mangled variable. That is, to make it pseudo-private, it's been automagically renamed to _<classname>__<variablename> instead of __<variablename>. It can still be accessed by instances of that class only as __<variablename>, subclasses don't get this special treatment.

    I would recommend that you not use the double leading underscore, just a single underscore to (a) mark that it is private, and (b) to avoid the name mangling.

    0 讨论(0)
  • 2021-01-06 04:36

    Refer to it as A._A__a. In Python, symbols with a __ prefix occurring inside a class definition are prefixed with _<class-name> to make them somewhat "private". Thus the reference A.__a that appears in the definition of B is, counterintuitively, a reference to A._B__a:

    >>> class Foo(object): _Bar__a = 42
    ... 
    >>> class Bar(object): a = Foo.__a
    ... 
    >>> Bar.a
    42
    
    0 讨论(0)
  • 2021-01-06 04:57

    There are Python decorators @staticmethod and @classmethod, which you can use to declare a method static or class-related. This should help accessing your class data element:

    class MyClass:
         __a = 0
    
         @staticmethod
         def getA():
             return MyClass.__a
    
    class MyOtherClass:
    
         def DoSomething(self):
             print MyClass.getA() + 1
    

    Example inspired by this source: http://www.rexx.com/~dkuhlman/python_101/python_101.html

    0 讨论(0)
提交回复
热议问题