Access static class variable of parent class in Python

六月ゝ 毕业季﹏ 提交于 2019-12-01 08:38:45

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.

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!