python-3.x - 如何从 python 中该类的实例中检索类变量列表?
问题描述
例如,这是以下类:
class Fruits(object):
name = 'Fruits'
short_description = 'Fruits class'
long_description = 'Fruits class that takes in a list of fruits'
def __init__(self,fruits_lst):
self.fruits_lst = fruits_lst
self.total = len(fruits_lst)
我想检索一个类变量列表,不包括任何类实例变量。那就是列表将是 ['name','short_description','long_description']。
我该怎么做呢?
我认识到我可以部署它来提取关于班级的信息:
fruits = Fruits(['Apples','Bananas','Oranges'])
dir(fruits)
['__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'fruits_lst',
'long_description',
'name',
'short_description',
'total']
但是,我怎样才能只提取我想要的信息呢?
谢谢!
更新:
我刚刚发现我可以通过将 dir 应用于类本身而不是类的实例来做到这一点:
class_variables = [var for var in dir(Fruits) if not var.startswith('__')]
class_variables
['long_description', 'name', 'short_description']
所以,这是一个“解决方案”。但是,对于我拥有的用例,我只能访问类实例,而不是类本身。那么,有没有办法通过类实例直接提取这些信息,而不必通过列表理解进行过滤?
谢谢!
解决方案
看起来仍然很老套,但是:
[i for i in vars(Fruits).keys() if not i.startswith('__')]
# in case of instance
[i for i in vars(fruits.__class__).keys() if not i.startswith('__')]
至少要过滤的值更少
更新
防止在列表中获取类方法名称
attribute_list = []
for k, v in vars(Fruits).items():
if not k.startswith('__') and not callable(v):
attribute_list.append(k)
推荐阅读
- google-cloud-data-fusion - Cloud Data Fusion - 如何处理源 DB2 模式中的非法字符
- r - R 在 Rcpp 中使用 stats::optimize,简单示例无法编译
- javascript - 使用复选框切换对 div 求和
- node.js - 安装问题:找不到模块 Yarn
- python - Python无法为数据框中的空单元格赋值
- function - 我可以在 studio 5000 的结构化文本中声明用户定义的函数吗?
- laravel - Laravel - Maatwebsite Excel 导入仅存储在存储中,但不存储在数据库中
- javascript - 如何将增量添加到类的两个特定属性?
- android - Android 模拟器不工作:无法打开 /qemu.conf,找不到加速器等等
- python - 如何禁用 chromedriver selenium 上的视频?