小编Jak*_*rde的帖子

检查python类属性

我需要一种方法来检查类,所以我可以放心地识别哪些属性是用户定义的类属性.问题是,像DIR功能(),inspect.getmembers()和朋友返回所有类的属性包括预定义的像:__class__,__doc__,__dict__,__hash__.这当然是可以理解的,而且人们可以说,我只能命名的成员名单忽视,但遗憾的是这些预先定义的属性绑定,因此不同版本的Python使我的项目volnerable在Python项目改改 - 我不喜欢那样.

例:

>>> class A:
...   a=10
...   b=20
...   def __init__(self):
...     self.c=30
>>> dir(A)
['__doc__', '__init__', '__module__', 'a', 'b']
>>> get_user_attributes(A)
['a','b']
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想要一种安全的方法来只检索用户定义的类属性['a','b']而不是'c',因为它是一个实例属性.所以我的问题是......任何人都可以帮我解决上述虚构功能get_user_attributes(cls)吗?

PS我花了一些时间试图通过解析AST级别的类来解决问题,这很容易.但我找不到将已解析的对象转换为AST节点树的方法.我想一旦将一个类编译成字节码,就会丢弃所有的AST信息.

最好的问候雅各布

python attributes class introspection inspect

32
推荐指数
2
解决办法
3万
查看次数

标签 统计

attributes ×1

class ×1

inspect ×1

introspection ×1

python ×1