如何定义所有实例都可访问的类变量

时间:2017-07-06 19:22:53

标签: python

我希望所有实例都定义一个具有类范围范围/访问权限的数组。示例模块(bc.py):

class B:
    glist = []  # array common to all instances

    def __init__(self, number):
        glist.append(number)                                                                                                            

    def printCurrentList():
        print ('Current List:', glist)

class C:
    def __init__(self):
        b1 = B(7)
        b2 = B(2)
        b3 = B(8)

    def printNow(self):
        B.printCurrentList()

我从a.py文件中调用它,如:

from bc import C                                                                                                                        
C().printNow()

将错误视为:

python a.py
Traceback (most recent call last):
  File "a.py", line 2, in <module>
    C().printNow()
  File "/Users/manidipsengupta/pytorials/bc.py", line 16, in __init__
    b1 = B(7)
  File "/Users/manidipsengupta/pytorials/bc.py", line 7, in __init__
    glist.append(number)
NameError: name 'glist' is not defined

这应该是什么正确的语法?谢谢。

2 个答案:

答案 0 :(得分:4)

无论

B.glist.append(number)

self.glist.append(number)

会奏效。我更喜欢前者,因为它更好地表明glist是一个静态类变量,而不是每个实例。

答案 1 :(得分:1)

您可以通过类或实例访问类变量:

class B:
    glist = []  # array common to all instances

    def __init__(self, number):
        self.glist.append(number)                                                                                                            

    @classmethod
    def printCurrentList(cls):
        print ('Current List:', cls.glist)