Linux上的Python安装通过此查询识别对象类的187个子类:

kali@kali:~$ python3 -c 'print(len("".__class__.__mro__[1].__subclasses__()))'

在空闲shell中的同一查询标识了342个子类,而在IDE中只有217!

用户能否决定哪些子类在给定环境中是可操作的,或者子类是否由供应商严格执行?

推荐答案

在对各种设置执行判断时,您的查询似乎基于object类的属性:

"".__class__.__mro__
(<class 'str'>, <class 'object'>)

因此,您的查询可以翻译为:

len(object.__subclasses__())

让我们把你的问题改写为:Why does the count of subclasses of the class 100 vary with respect to the context?

关键是:您的查询从字面上统计从类对象继承的类的数量(阅读更多关于这specific class的内容)at the moment of querying,并且这个数量肯定取决于您的python版本、环境和导入.

当然,这两种情况下python的初始化并不等同,因为从object继承的对象数量不同.

例如,定义一个依赖于(显式或非显式)object的类就足以更改此计数:

>>> len(object.__subclasses__())
282
>>> class A(object):
...    pass
...
>>> len(object.__subclasses__())
283
>>> class B:
...     pass
...
>>> len(object.__subclasses__())
284

导入包确实也会改变此计数:

>>> import pandas as pd
>>> len(object.__subclasses__())
712

请注意,这也取决于环境.因此,基本上这取决于在该路径中可以找到的PYTHONPATH个和已安装的模块:

> activate base
(base) > python -c "print(len(object.__subclasses__()))"
202
(base) > activate test
(test) > python -c "print(len(object.__subclasses__()))"
139

所以答案几乎是肯定的,因为空闲的ran不是相同的python版本,或者它没有相同的环境,或者它导入了与PyCharm IDE不同的模块.

正如@jasonharper所指出的,IDLE可能导入了python类,从而增加了计数.

因此,如果你需要保持这种判断,你必须修复上下文,使其可复制.为此,您可以使用具有特定图像的环境或容器.或者设计另一种更具弹性的判断.

Python相关问答推荐

ODE集成中如何终止solve_ivp的无限运行

有没有一种方法可以从python的pussompy比较结果中提取文本?

如果值发生变化,则列上的极性累积和

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

如何让这个星型模式在Python中只使用一个for循环?

形状弃用警告与组合多边形和多边形如何解决

在单个对象中解析多个Python数据帧

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

如何使用SentenceTransformers创建矢量嵌入?

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

Python—为什么我的代码返回一个TypeError

Python Mercury离线安装

如何重新组织我的Pandas DataFrame,使列名成为列值?

如何编辑此代码,使其从多个EXCEL文件的特定工作表中提取数据以显示在单独的文件中

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

在MongoDB文档中仅返回数组字段

保存由PYTHON在EXCEL中所做更改的问题

nameError_C未定义