如果我有一个python类,它有静态属性,并且我示例化了该类中的两个对象,静态属性会被创建两次(每个对象一次)还是会被保存在一个对象共享的静态内存中?我知道在C++中有一种类型的内存包含了所有的静态属性和方法,但是在python中并不清楚是否是这样。
rqcrx0a61#
我已经编写了一些代码来解释发生了什么。输出将显示代码执行的顺序。它将显示在定义类的同时如何创建类属性。(Note class Report在这里只是一个助手,它唯一的工作就是在每次创建示例时打印一些东西)
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作为第一行,则首先打印i和j。
Klass
from Klass import Klass
i
j
1条答案
按热度按时间rqcrx0a61#
我已经编写了一些代码来解释发生了什么。输出将显示代码执行的顺序。
它将显示在定义类的同时如何创建类属性。
(Note
class Report
在这里只是一个助手,它唯一的工作就是在每次创建示例时打印一些东西)输出:
请注意,如果
Klass
在不同的模块中,您将具有类似于以下内容的内容:from Klass import Klass
作为第一行,则首先打印i
和j
。