- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面的代码
import types
class A:
class D:
pass
class C:
pass
for d in dir(A):
if type(eval('A.'+d)) is types.ClassType:
print d
输出
C
D
如何让它按照这些类在代码中定义的顺序输出?即
D
C
除了使用 inspect.getsource(A) 并对其进行解析之外,还有其他方法吗?
最佳答案
请注意,解析已经在 inspect 中为您完成 - 查看 inspect.findsource
,它在模块中搜索类定义并返回源代码和行号。按该行号排序(您可能还需要拆分在单独模块中定义的类)应该给出正确的顺序。
不过这个函数好像没有文档,只是用正则表达式找那一行,所以可能不太靠谱。
另一种选择是使用元类,或一些其他方式来隐式或显式地为对象排序信息。例如:
import itertools, operator
next_id = itertools.count().next
class OrderedMeta(type):
def __init__(cls, name, bases, dct):
super(OrderedMeta, cls).__init__(name, bases, dct)
cls._order = next_id()
# Set the default metaclass
__metaclass__ = OrderedMeta
class A:
class D:
pass
class C:
pass
print sorted([cls for cls in [getattr(A, name) for name in dir(A)]
if isinstance(cls, OrderedMeta)], key=operator.attrgetter("_order"))
然而,这是一个相当侵入性的更改(需要将您感兴趣的任何类的元类设置为 OrderedMeta)
关于Python 自省(introspection) : How to get an 'unsorted' list of object attributes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640479/
您如何对结果进行排序、操作和取消排序? 假设我有一个 float 组p1 = 0.15,0.3, 0.25, 0.12, ...。它被排序为:p2 = sort(p1)。函数(以 p2 作为输入进行操
(快速说明!虽然我知道在 Python 中有很多排序选项,但这段代码更像是一个通用的概念验证,稍后将移植到另一种语言,所以我不会能够使用任何特定的 Python 库或函数。 另外,您提供的解决方案不一
我想生成一个列表列表。每个子列表将通过从 range(100) 中采样生成。我需要确保主列表中不存在相同(即具有完全相同的元素)但排序不同的列表(即我不想要 [1,2,3] 和 [2,1,3] 同时出
我一直在阅读an implementation的 glob并使用 Ubuntu Bionic 和 Trusty 对其进行测试。 在高层次上,我测试了一个模式,例如 /foo/*/bar使用 GLOB_
jQuery 吗 DataTables插件支持“未排序”或“自然排序顺序”的概念。 也就是说,我有一个表,其中打印行的顺序很重要。 One Two Three 有时用户会希望按字母顺序对这些内容进行排
我在排序和重置 Pandas 中的索引时遇到了一些问题: dfm = dfm.sort(['delt'],ascending=False) dfm = dfm.reindex(index=range(
我在 https://github.com/JamesRead5737/webcrawler/blob/master/crawler.c 有一个网络爬虫代码这产生了一些我无法解释的奇怪错误。最常见的是
如果我有一个数组列表并用以下方法对其进行排序: myArrayList.sort(function(a, b) { return a - b }); 是否可以在不备份未排序数组的情况下将“myArra
谁能帮忙分析一下这个can的时间复杂度,请解释原因。 我正在将数组元素相互比较,其中一个是最大值。 我不确定如何为此计算时间复杂度。 谁能帮我解决这个问题? class Largest {
我正在尝试使用一个正图像和 opencv_createsamples 生成正图像以进行 haar 训练。我在虚拟盒子中使用 ubuntu 16.4,更新和升级系统,我安装了最后一个 libopencv
我正在阅读 Cracking the Coding Interview, Fourth Edition: 150 Programming Interview Questions and Solutio
我基本上必须编写一个函数,它接受一个数组、一个表示数组中元素的 int n 和一个表示数组中第 k 个最小 int 的 int k (不是第 k 个最小位置)。不允许修改(排序)数组。我花了一段时间试
这是我希望得到答案的另一个 JavaFX 问题。目前,当您在 TableView 中对列进行排序时,第一次单击会升序,第二次单击会降序,第三次单击时不会执行任何操作,排序箭头也会消失。我知道第三种排序
下面的代码 import types class A: class D: pass class C: pass for d in dir(A):
我是第一次使用 django-filer,它看起来很棒,而且运行良好。 但是我所有的图片都被上传到“未分类上传”文件夹中,我想不出将它们放在特定文件夹中的方法。这让我觉得这是一项基本功能,鉴于它允许您
我发现 Python 3 有以下奇怪的行为: file = open(path, mode='rb').read() file_ori = open(self.filePath, mode='rb')
我在一次考试中做了这个练习,它说: Find an algorithm which can search for the highest number in an unsorted list and
我正在尝试了解 PEP-8 指南、编写 Pythonic 代码和 Python 的标准库(我已经踏入这段旅程的一天)。使以下代码(包括注释)更符合 Pythonic 的建议将不胜感激。我知道算法可以改
我使用 Python 创建了一项服务,该服务使用 pymssql 连接到 SQL Azure,并且仅进行 SELECT 查询。 1 天(或更长时间)后,连接在查询中开始失败,最后服务以错误结束: Er
在尝试使用 concurrent.futures 模块同时从谷歌驱动器下载文件时,以下脚本抛出 malloc(): unsorted double linked list corrupted. fil
我是一名优秀的程序员,十分优秀!