类变量在python中的所有实例之间共享?

发布于 2021-01-29 19:36:58

我一周前开始用python进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码。我以为我的C ++水平会有所帮助…。

class A:
     var=0
     list=[]
     def __init__(self):
            pass

令我惊讶的是,var和list都是一个全局变量,似乎在所有实例中都共享....我以为在所有实例中它都不同.....我花了半天的时间才弄清楚那....一点意义都没有,一个变量只能由一个类对象访问,而是在所有实例之间共享....只是好奇,它背后有原因吗???
??

关注者
0
被浏览
56
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    var只要您通过instance.var或访问,绝对不应共享self.var。但是,对于列表,您的语句要做的是在评估该类时,将创建一个列表实例并将其绑定到该类dict,因此所有实例将具有相同的列表。每当您设置instance.list = somethingelse响应时。self.list = somethingelse,它应该获得实例级别的值。

    时间示例:

    >>> class A():
    ...     var = 0
    ...     list = []
    ...
    >>> a = A()
    >>> b = A()
    >>> a.var
    0
    >>> a.list
    []
    >>> b.var
    0
    >>> b.list
    []
    >>> a.var = 1
    >>> b.var
    0
    >>> a.list.append('hello')
    >>> b.list
    ['hello']
    >>> b.list = ['newlist']
    >>> a.list
    ['hello']
    >>> b.list
    ['newlist']
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看