如何打印所有类属性而非实例属性,得到['list1','list2']输出?
获取类属性而非实例属性的实现方案
嘿,刚好碰到过类似的需求!要只提取类本身的属性(排除实例属性)并得到['list1','list2']这样的结果,这里有两种简单靠谱的方法,用Python就能轻松实现:
方法一:利用类的__dict__属性直接过滤
类的__dict__属性会存储它所有的自定义属性和内置属性,我们只需要过滤掉那些双下划线开头的内置属性(比如__module__、__doc__)就行。举个例子:
# 先定义一个包含类属性和实例属性的示例类 class MyClass: list1 = [] list2 = [] def __init__(self): self.instance_attr = "这是实例独有的属性" # 提取类属性 class_attributes = [key for key in MyClass.__dict__ if not key.startswith('__')] print(class_attributes) # 输出: ['list1', 'list2']
方法二:结合dir()函数筛选
dir()会列出类的所有属性和方法,我们可以进一步过滤掉方法和内置属性,只保留类变量:
class_attributes = [attr for attr in dir(MyClass) if not attr.startswith('__') and not callable(getattr(MyClass, attr))] print(class_attributes) # 输出: ['list1', 'list2']
这个方法更严谨,如果你的类里定义了方法,它会自动排除掉,只留下类级别的变量。
小提示
要注意区分类属性和实例属性:类属性是存在类的命名空间里的,所有实例共享;而实例属性是每个实例自己创建的,只属于该实例。所以直接操作类本身的属性集合(而不是实例的),就能准确拿到你想要的结果啦!
内容的提问来源于stack exchange,提问作者Artem Lazarev
相关产品推荐
相关产品推荐

