📌  相关文章
📜  如何在Python中获取类属性列表?(1)

📅  最后修改于: 2023-12-03 15:24:35.765000             🧑  作者: Mango

如何在Python中获取类属性列表?

在Python中,我们可以使用内置函数dir()来获取一个对象的所有属性,包括类属性、实例属性、方法等等。但是它会返回所有属性,包括一些Python内置的属性和方法,可能会让人有些困惑。所以,如果我们想要只获取类属性列表,应该怎么做呢?

方法一:

我们可以通过vars()函数来获取对象的属性字典,然后筛选出字典中的类属性,最后返回类属性的key值列表即可。

class MyClass:
    class_var = 1
    def __init__(self, x):
        self.instance_var = x
        
attrs = MyClass.__dict__
class_attrs = [k for k,v in attrs.items() if not k.startswith("__") and not callable(v)]
print(class_attrs)  # ['class_var']

代码解释:

  1. vars()函数会返回一个对象的属性字典。
  2. 我们在这里使用了类的__dict__属性来获取类属性字典。
  3. 然后,我们使用列表推导式遍历字典,筛选出不是以双下划线__开头和不是可调用对象(方法)的属性,即为类属性。
  4. 最后输出类属性key值的列表。

方法二:

另外,我们还可以直接使用类的__dict__属性来获取类属性的字典,然后返回key值的列表。

class MyClass:
    class_var = 1
    def __init__(self, x):
        self.instance_var = x
        
class_attrs = [k for k in MyClass.__dict__ if not k.startswith("__")]
print(class_attrs)  # ['class_var']

代码解释:

  1. 直接使用类的__dict__属性获取类属性字典。
  2. 和方法一一样,使用列表推导式筛选出不是以双下划线__开头的属性,并返回key值的列表。

综上两种方法,我们可以通过简单的代码来获取类属性列表。

注意: 如果一个类属性在子类中被覆盖,那么它并不会被包含在子类的__dict__属性中,所以在使用这两种方法时要注意可能会出现遗漏的情况。