python类中的静态属性是否随每个新对象示例化,还是所有对象都相同?

jvlzgdj9  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(139)

如果我有一个python类,它有静态属性,并且我示例化了该类中的两个对象,静态属性会被创建两次(每个对象一次)还是会被保存在一个对象共享的静态内存中?
我知道在C++中有一种类型的内存包含了所有的静态属性和方法,但是在python中并不清楚是否是这样。

rqcrx0a6

rqcrx0a61#

我已经编写了一些代码来解释发生了什么。输出将显示代码执行的顺序。
它将显示在定义类的同时如何创建类属性。
(Note class Report在这里只是一个助手,它唯一的工作就是在每次创建示例时打印一些东西)

print('First line.')

class Report:
    def __init__(self, name):
        self.name = name
        print(f'Reporting name:{name}')

    def __str__(self):
        return f'Report named:{self.name}'

print('Before Klass')

class Klass:
    i = Report('i')
    j = Report('j')

    def __init__(self, name):
        self.k = Report(name)

def main():
    print('Starting main()')
    x = Klass('x')
    y = Klass('y')
    print(x.i, x.j)
    print(y.i, y.j)

if __name__ == '__main__':
    print('Above are the "static" allocations')
    print()
    main()
    print('Done')

输出:

First line.
Before Klass
Reporting name:i
Reporting name:j
Above are the "static" allocations

Starting main()
Reporting name:x
Reporting name:y
Report named:i Report named:j
Report named:i Report named:j
Done

请注意,如果Klass在不同的模块中,您将具有类似于以下内容的内容:from Klass import Klass作为第一行,则首先打印ij

相关问题