Python 类变量问题

发布于 2024-09-02 20:24:27 字数 611 浏览 8 评论 0原文

我对python的类变量有一些疑问。据我了解,如果我定义一个在 __init__() 函数外部声明的类变量,则该变量将仅在 C++ 中作为静态变量创建一次。

这对于某些 python 类型(例如 dict 和 list 类型)似乎是正确的,但对于那些基本类型(例如 int、float)则不同。

例如:

class A:
    dict1={}
    list1=list()
    int1=3

    def add_stuff(self, k, v):
        self.dict1[k]=v
        self.list1.append(k)
        self.int1=k

    def print_stuff(self):
        print self.dict1,self.list1,self.int1

a1 = A()
a1.add_stuff(1, 2)
a1.print_stuff()
a2=A()
a2.print_stuff()

输出为:

{1: 2} [1] 1
{1: 2} [1] 3

我理解 dict1 和 list1 的结果,但为什么 int1 的行为不同?

I have some doubt about python's class variables. As my understanding, if I define a class variable, which is declared outside the __init__() function, this variable will create only once as a static variable in C++.

This seems right for some python types, for instance, dict and list type, but for those base type, e.g. int,float, is not the same.

For example:

class A:
    dict1={}
    list1=list()
    int1=3

    def add_stuff(self, k, v):
        self.dict1[k]=v
        self.list1.append(k)
        self.int1=k

    def print_stuff(self):
        print self.dict1,self.list1,self.int1

a1 = A()
a1.add_stuff(1, 2)
a1.print_stuff()
a2=A()
a2.print_stuff()

The output is:

{1: 2} [1] 1
{1: 2} [1] 3

I understand the results of dict1 and list1, but why does int1 behavior different?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨笨の傻瓜 2024-09-09 20:24:27

不同之处在于,您永远不会分配给 self.dict1 或 self.list1 - 您只从类中读取这些字段,而您会分配给 self。 int1,从而创建一个隐藏类字段的实例字段。

The difference is that you never assign to self.dict1 or self.list1 — you only ever read those fields from the class — whereas you do assign to self.int1, thus creating an instance field that hides the class field.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文