访问Python中父类的静态类变量
-
28-09-2019 - |
题
我有这样的
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
我可以访问 __a
类变量IN B
?可能写作 a
代替 __a
, ,这是唯一的方法吗? (我猜答案可能很短:是:)
解决方案
所以, __a
不是 静止的 变量,这是一个类变量。而且由于双重领导下降,这是一个 名字困扰 多变的。也就是说,为了使其成为伪私人,它已自动重命名为 _<classname>__<variablename>
代替 __<variablename>
. 。仍然可以通过 只有那个课 作为 __<variablename>
, ,子类别没有得到这种特殊待遇。
我建议您不要使用双重领导下划线,只有一个下划线来(a)标记它是私人的,并且(b)避免了杂交的名称。
其他提示
称之为 A._A__a
. 。在Python中,带有一个带有一个的符号 __
在类定义内发生的前缀有前缀 _<class-name>
让他们有些 “私人的”. 。因此参考 A.__a
在定义中出现 B
在违反直觉的情况下 A._B__a
:
>>> class Foo(object): _Bar__a = 42
...
>>> class Bar(object): a = Foo.__a
...
>>> Bar.a
42
有python装饰师 @staticmethod
和 @classmethod
, ,您可以用来声明方法静态或类相关的方法。这应该有助于访问您的类数据元素:
class MyClass:
__a = 0
@staticmethod
def getA():
return MyClass.__a
class MyOtherClass:
def DoSomething(self):
print MyClass.getA() + 1
受此来源启发的示例:http://www.rexx.com/~dkuhlman/python_101/python_101.html
不隶属于 StackOverflow