0

在我的 Java 中,我有一个中央引导加载程序,它将所有默认值保持为公共静态或私有静态,稍后当需要时,我可以转到其他类/线程并访问它们以进行修改等。例如:

public class main extends JWindow implements MouseListener, MouseMotionListener {

  private static boolean isDetect = true;
  public  static String  vncMode  = "1980";
  ...

  public main() { 
    vncMode = C.readIni("vncmode"); // 1980
  }    
}

public class TCPHandler implements Runnable {
  import main.*;
  public void run() {
    if (main.vncMode.equals("1999" ) || 
        main.vncMode.equals("2013")) {
      echo(main.vncMode, RED);
    } else {
      echo(main.vncMode, GREEN);
    }
  }
}

与 Java 类似,在 Python 中,我如何设置公共静态/私有静态声明,以便我可以从该值的任何其他类访问?

python1.py:

from bgcolors import bgcolors
class Python1(object):
  isDetect = True  
  def run(self):
    # expecting vncMode = 1980
    print bgcolors.RED +  "we are now in 1999: from version: " + vncMode

python2.py:

from bgcolors import bgcolors
class Python2(object):
  isDetect = True  
  def run(self):
    # expecting vncMode = 1980
    print bgcolors.RED + "we are now in 2013: from version: " + vncMode

主要.py:

from bgcolors import bgcolors
from python1 import Python1
from python2 import Python2

vncMode = "1980"

a = Python1()
a.run()

b = Python2()
b.run()

我如何设置值 1980 并在所有类中获得 1980 ?

4

2 回答 2

1

如果您有一个容器来存储您要共享的属性

# example, could be a simple tuple, a full class or instance or dictionary, etc.
attributes = namedtuple("attributes", "vncmode")("1980")

您可以在初始化时将属性传递给所有类:

class ...:
    def __init__(self, attributes, ...):
        self.attributes = attributes

然后实例可以self.attributes.vncmode用作共享的可变值。

于 2013-09-21T20:06:22.280 回答
0

虽然我通常会使用一个参数__init__,并在创建时将值显式传递给每个实例,但 python 有global关键字可以按照您的要求做一些事情。

a_name = "A Value"

class Sample(object):
    def a_method(self):
        global a_name
        print a_name

sample_instance = Sample()
sample_instance.a_method()  # prints "A Value"

但你真的应该做类似的事情......

a_name = "A Value"

class Sample2(object):
    def __init__(self, value):
        self.value = value
    def a_method(self):
        print self.value

sample_instance = Sample2(a_name)
sample_instance.a_method()  # prints "A Value"
于 2013-09-22T02:47:34.223 回答