首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何动态了解和实例化Python模块中实现的一个类

如何动态了解和实例化Python模块中实现的一个类
EN

Stack Overflow用户
提问于 2020-04-28 02:21:23
回答 1查看 29关注 0票数 1

假设在"./data_writers/excel_data_writer.py“中,我有:

代码语言:javascript
运行
AI代码解释
复制
from generic_data_writer import GenericDataWriter

class ExcelDataWriter(GenericDataWriter):
   def __init__(self, config):
       super().__init__(config)
       self.sheet_name = config.get('sheetname')

   def write_data(self, pandas_dataframe):
       pandas_dataframe.to_excel(
           self.get_output_file_path_and_name(), # implemented in GenericDataWriter
           sheet_name=self.sheet_name,
           index=self.index)

在"./data_writers/csv_data_writer.py“中,我有:

代码语言:javascript
运行
AI代码解释
复制
from generic_data_writer import GenericDataWriter

class CSVDataWriter(GenericDataWriter):
   def __init__(self, config):
       super().__init__(config)
       self.delimiter = config.get('delimiter')
       self.encoding = config.get('encoding')

   def write_data(self, pandas_dataframe):
       pandas_dataframe.to_csv(
           self.get_output_file_path_and_name(), # implemented in GenericDataWriter
           sep=self.delimiter,
           encoding=self.encoding,
           index=self.index)

在"./datawriters/generic_data_writer.py“中,我有:

代码语言:javascript
运行
AI代码解释
复制
import os

class GenericDataWriter:
   def __init__(self, config):
       self.output_folder = config.get('output_folder')
       self.output_file_name = config.get('output_file')
       self.output_file_path_and_name = os.path.join(self.output_folder, self.output_file_name)
       self.index = config.get('include_index') # whether to include index column from Pandas' dataframe in the output file

假设我有一个JSON配置文件,它的键值对如下所示:

代码语言:javascript
运行
AI代码解释
复制
{
"__comment__": "Here, user can provide the path and python file name of the custom data writer module she wants to use."
"custom_data_writer_module": "./data_writers/excel_data_writer.py"

"there_are_more_key_value_pairs_in_this_JSON_config_file": "for other input parameters"
}

在"main.py“中,我希望根据上面的JSON配置文件中提供的custom_data_writer_module导入数据写入器模块。所以我写了这个:

代码语言:javascript
运行
AI代码解释
复制
import os
import importlib

def main():
    # Do other things to read and process data

    data_writer_class_file = config.get('custom_data_writer_module')
    data_writer_module = importlib.import_module\
            (os.path.splitext(os.path.split(data_writer_class_file)[1])[0])

    dw = data_writer_module.what_should_this_be?   # <=== Here, what should I do to instantiate the right specific data writer (Excel or CSV) class instance?
    for df in dataframes_to_write_to_output_file:
        dw.write_data(df)

if __name__ == "__main__":
    main()

正如我在上面的代码中所问的,我想知道是否有一种方法可以检索和实例化Python模块中定义的类(假设模块中只定义了一个类)。或者,如果有更好的方法来重构我的代码(使用某种模式)而不改变上面描述的JSON配置文件的结构,我想向StackOverflow方面的Python专家学习。提前感谢您的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-28 02:45:37

您可以使用vars轻松实现这一点

代码语言:javascript
运行
AI代码解释
复制
cls1,=[v for k,v in vars(data_writer_module).items()
       if isinstance(v,type)]
dw=cls1(config)

逗号强制要求只找到一个类。如果允许该模块执行from collections import deque (甚至是foo=str)之类的操作,则可能需要基于v.__module__进行过滤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61471586

复制
相关文章
css实现圆形的四种方法
是最简单的应用,并且得到了广泛的支持。该border-radius属性还将影响边框,阴影和元素的触摸/单击目标大小。
薛定喵君
2020/02/17
3K0
【SVG】Path 路径用法详解
SVG Path可用于绘制复杂的路径,如创建线条, 曲线, 弧形等等。其所有属性中,属性d是一个“命令+参数”的序列,用于描述路径,Path强大正在于d属性,因此掌握了d属性成了关键。
Yorkyu
2022/03/22
3.1K0
【SVG】Path 路径用法详解
用SVG实现一个优雅的提示框
Tooltips常被称为提示框(或信息提示框),提示框能够以较强的交互性、自由度为用户提供相应的提示信息。今天我们要聊的不是如何实现强大的交互行为,而是来看看如何以最好的方式来还原他们的视觉效果,并且能适用于不同的场景。
ConardLi
2020/06/10
2.5K0
用SVG实现一个优雅的提示框
一篇文章带你了解SVG 阴影
所有互联网的SVG滤镜定义在<defs>元素中。<defs>元素定义短并含有特殊元素(如滤镜)定义<filter>标签用来定义SVG滤镜。
前端进阶者
2021/03/03
9100
一篇文章带你了解SVG 阴影
SVG 路径动画简易指南
任何有开发经验的前端工程师都会考虑到不成体系的设备生态所带来的挑战。设备间不同的屏幕尺寸、分辨率和比例使得产品难以提供一致的体验,对于那些对产品有着像素级完美追求的人这种体验差异尤其显著! SVG(可缩放的矢量图形)完美地解决了上文中提到的部分问题。尽管 SVG 有它的局限性,但是在某些场景下是非常有用的,如果你有一个好的设计团队,你也可以基于SVG创建一些震撼的视觉体验,而不必担心给浏览器带来过重的渲染负担或阻碍页面的加载时间。
疯狂的技术宅
2019/03/27
3.6K0
SVG 路径动画简易指南
SVG 直线路径写法示例
大写字母表示到后面值为绝对值,小写字母表示后面值为相对当前点的值 画一条起点是(10, 10)终点点是 (20, 30) 的线
前端GoGoGo
2018/08/24
7560
CSS实用技巧总结
全名Don't Repeat Yourself,该原则适用于所有编程语言而不限于css。
Nealyang
2020/04/22
1.5K0
CSS实用技巧总结
打造高水平设计的必备利器Ai中文版illustrator-直装永久使用
Adobe illustrator是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件,很多有插画排版或者矢量插图 工作 需求的小伙伴们会经常和这款软件打交道,但是最近小编发现了这款软件的新功能,就是制作海报,小编相信有很多小伙伴们还不知道吧,那么接下来就看看小编为大家带来的这篇文章学习一下制作方法吧!
木子学Lee
2023/04/08
1.5K0
打造高水平设计的必备利器Ai中文版illustrator-直装永久使用
【整理】SpringBoot默认的各种路径(如静态资源路径,配置文件路径等)
传统的Java Web项目,一般是新建一个WebContent目录,然后所有页面,js等静态资源都放在里面。但是在SpringBoot的规范里,不需要这么做
RRT冻羊
2022/11/03
5.5K0
奇思妙想 CSS 文字动画
本文将会和这篇 -- CSS 奇思妙想边框动画类似,讲一些文字效果,利用不同的属性搭配,实现各式各样的文字动效。
Sb_Coco
2021/03/11
3.5K0
奇思妙想 CSS 文字动画
【CSS】1095- CSS filter 有哪些神奇用途
CSS filter 属性将模糊或颜色偏移等图形效果应用于元素形成滤镜,滤镜通常用于调整图像,背景和边框的渲染。它的值可以为 filter 函数 <filter-function> 或使用 url 添加的svg滤镜。
pingan8787
2021/10/08
1.2K0
【CSS】1095- CSS filter 有哪些神奇用途
CSS filter 有哪些神奇用途
CSS filter 属性将模糊或颜色偏移等图形效果应用于元素形成滤镜,滤镜通常用于调整图像,背景和边框的渲染。它的值可以为 filter 函数 <filter-function> 或使用 url 添加的svg滤镜。
coder_koala
2021/07/08
1.3K0
CSS filter 有哪些神奇用途
Flutter 绘制实践 | 路径篇 - 阴影模糊
说起 Flutter 绘制阴影,很多朋友可能都知道 Canvas 本身有 drawShadow 方法。可以根据入参的 Path 路径,绘制阴影。就像我们男人分不清口红色号一样,觉得口红就是红色,很多编程者也会觉得阴影就是影子。如果一个方法就能绘制出完美的阴影,也不会单独写篇文章。
张风捷特烈
2023/02/15
1.3K0
Flutter 绘制实践 | 路径篇 - 阴影模糊
SVG 动画精髓(上)
本文作者:ivweb villainthr TL;DR 本文主要是讲解关于 SVG 的一些高级动画特效,比如 SVG 动画标签,图形渐变,路径动画,线条动画,SVG 裁剪等。 例如:路径动画 图形
腾讯IVWEB团队
2017/07/06
3.7K0
SVG 动画精髓(上)
web 图像技术:前端引入图片的各种方式及其优缺点
前端开发人员在构建网站时需要做的一个决定是引入图片的方式。它可以是<img>标签,或者是通过CSS background 属性,还可以使用 SVG <image>。选择正确的方式是很重要的,它对性能和可访问性有很大的影响。
前端小智@大迁世界
2020/05/12
5.1K0
web 图像技术:前端引入图片的各种方式及其优缺点
如何在 CSS 中设计出漂亮的阴影?
然而,当我环顾网络时,很明显,大多数阴影并不像它们所希望的那样丰富,网络上覆盖着模糊的灰色盒子,看起来并不像影子。
唐志远
2023/08/17
5080
如何在 CSS 中设计出漂亮的阴影?
如何在Cloudera Manager中配置Yarn放置规则
Hadoop集群管理员希望能对集群Yarn作业的资源进行控制。根据不同的业务组或不同的用户,对Yarn的资源池进行划分,达到资源管控、任务管控的效果。通过CM可以进行Yarn动态资源的配置,这里Fayson主要介绍如何在Cloudera Manager中配置Yarn动态资源池的放置规则。
Fayson
2018/11/08
3.2K0
简单的canvas绘图
注意:默认情况下 <canvas> 元素没有边框和内容,width 和 height 属性定义的画布的大小.
江米小枣
2020/06/15
2.4K0
svg上实现图形移动
前两个参数分别是x轴半径和y轴半径,x-axis-rotation是绕x轴旋转角度,large-arc-flag(角度大小) 和sweep-flag(弧线方向),large-arc-flag决定弧线是大于还是小于180度,0表示小角度弧,1表示大角度弧。sweep-flag表示弧线的方向,0表示从起点到终点沿逆时针画弧,1表示从起点到终点沿顺时针画弧。
Enterprise_
2020/07/09
1K0
svg上实现图形移动
canvas绘制时钟 光明 | 黑暗主题
canvas时钟的绘制参考了 # Sunshine_Lin的# 为了让她10分钟入门canvas,我熬夜写了3个小项目和这篇文章
inline705
2021/12/09
7530
canvas绘制时钟 光明 | 黑暗主题

相似问题

C指针:*p++和p++差

43

取消引用后,*p++是否会递增?

50

等待(NULL)是否定义良好?

15

++*p++输出

22

什么是*p++=x

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文