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

2024-10-04 03:19:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定义一个数组,它具有类范围/所有实例的访问权限。示例模块(卑诗省)地址:

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

正确的语法应该是什么?非常感谢。你知道吗


Tags: inpyselfnumberinitdeflineclass
2条回答

或者

B.glist.append(number)

或者

self.glist.append(number)

会有用的。我更喜欢前者,因为它更好地表明glist是一个静态类变量,而不是每个实例。你知道吗

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

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)

相关问题 更多 >