我有这样的

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top