python 多线程笔记(6)-- 闭包

简介: 在类里弄一个闭包出来   很多资料上说,类内部的变量有两种。 按定义所在的位置,分__init__上方的和__init__下方的 按内存所在的位置,分类的和实例的,或者说公共的和私有的   现在,我想在类里定义一个保存实例个数的变量 x,如下: >>> class Foo: .

在类里弄一个闭包出来

 

很多资料上说,类内部的变量有两种。

按定义所在的位置,分__init__上方的和__init__下方

按内存所在的位置,分的和实例的,或者说公共的和私有

 

现在,我想在类里定义一个保存实例个数的变量 x,如下:

>>> class Foo:
. . .   x = 0
. . .   def __init__(self):
. . .       self.x += 1
. . .       print(self.x)

>>> f1 = Foo()
1
>>> f2 = Foo()
1
>>> Foo.x
0

 

显然,结果跟想法不符。

这里,各个实例的x是私有的,而类的x一直是零!

 

 

 

换种思路,把 x 定义成列表,看看

>>> class Bar:
. . .   x = [0]
. . .   def __init__(self):
. . .       self.x[0] += 1
. . .       print(self.x[0])

>>> b1 = Bar()
1
>>> b2 = Bar()
2
>>> Bar.x[0]
2

,额,可以了!因为x是对象,他的内存空间地址就固定了(这个说法不太恰当,将就理解吧)

 

目录
相关文章
|
编解码 自然语言处理 算法
开源版图生视频I2VGen-XL:单张图片生成高质量视频
VGen是由阿里巴巴通义实验室开发的开源视频生成模型和代码系列,具备非常先进和完善的视频生成系列能力
|
Web App开发 数据采集 JavaScript
我们来看一个基本的`pyppeteer`使用示例,包括`launch()`和`newPage()`方法。
我们来看一个基本的`pyppeteer`使用示例,包括`launch()`和`newPage()`方法。
|
算法 Java Apache
Java一分钟之-图像处理:BufferedImage与ImageIO
Java图像处理涉及`BufferedImage`和`ImageIO`。`BufferedImage`提供像素级访问,而`ImageIO`用于读写图像。常见问题包括:不支持的图像格式、处理尺寸不当、忽略异常和未关闭流。解决方法是检查插件支持、正确处理尺寸、捕获异常和及时关闭流。实践中不断优化,提升代码性能和稳定性。
598 0
C --- 自定义一个宏打印当前文件名、函数名、行号
C --- 自定义一个宏打印当前文件名、函数名、行号
439 0
|
弹性计算 物联网 网络性能优化
MQTT常见问题之connection reset by peer 异常如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
弹性计算 运维 Shell
遍历当前目录文件并执行检查
【4月更文挑战第30天】
177 0
|
人工智能 机器人 图形学
2023 年最好的36款 AI 生产力工具(上)
本文主要展示了36 款 AI 应用,可以帮助读者更快、更好地工作。每个人都在与ChatGPT交流,从完整的博客文章到特定代码行的功能都在询问。其结果令人惊叹。虽然我们仍在探索如何将这项技术纳入我们的工作流程中,但明显的是,人工智能工具正在改变游戏规则。尽管ChatGPT是目前最受欢迎的,但它远不是首款进入市场的人工智能应用程序。
1561 1
|
机器学习/深度学习 算法 数据可视化
基于计算机视觉手势识别控制系统YoloGesture (利用YOLO实现) 有详细代码+部署+在线服务器尝试+开源可复现
基于计算机视觉手势识别控制系统YoloGesture (利用YOLO实现) 有详细代码+部署+在线服务器尝试+开源可复现
MAC中让右键菜单出现终端(命令行)打开文件夹的功能
MAC中让右键菜单出现终端(命令行)打开文件夹的功能
2062 0
MAC中让右键菜单出现终端(命令行)打开文件夹的功能