📅  最后修改于: 2023-12-03 15:24:35.765000             🧑  作者: Mango
在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']
代码解释:
vars()
函数会返回一个对象的属性字典。__dict__
属性来获取类属性字典。__
开头和不是可调用对象(方法)的属性,即为类属性。方法二:
另外,我们还可以直接使用类的__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']
代码解释:
__dict__
属性获取类属性字典。__
开头的属性,并返回key值的列表。综上两种方法,我们可以通过简单的代码来获取类属性列表。
注意: 如果一个类属性在子类中被覆盖,那么它并不会被包含在子类的__dict__
属性中,所以在使用这两种方法时要注意可能会出现遗漏的情况。