所以我正在与第三方库进行交互,这会引发例外情况,但它基本上都会引发相同的异常(特别是suds.WebFault.但是,有可能从异常引发的数据中确定异常的确切类型.我希望将这个异常抽象为子类化这种类型的异常,即:

from suds import WebFault

class MoreSpecificError(WebFault):

pass

我喜欢子类化,因为它不会破坏期望WebFault的现有实现.我遇到的问题是将WebFault上已有的数据传递给MoreSpecificError.我想做的是获取现有的异常对象,然后将其“转换为”子类,不做任何更改或重新运行__init__.到目前为止我完成的工作是这样的:

from suds import WebFault

class MoreSpecificError(WebFault):

# You pass the old WebFault when instantiating this exception.

# Then it gets poofed into a MoreSpecificError type

def __new__(cls, internal_fault):

return internal_fault

# This is necessary to prevent the parent class' __init__ from being run

def __init__(self, internal_fault):

pass

编辑:我现在知道这不起作用,新对象将不是子类的类型

哪个“有用”,但是需要把__init__这个只是一个通行证感觉真的很重要.更不用说一些东西不喜欢自定义的__new__方法(阅读:deepcopy,它不是一个选择,我们使用的测试框架(生菜)使用它,我们已经投入很多).

我想知道是否有更好的方法来做到这一点?我知道理想的方法是最初提升子类,但我真的不想开始使用这个库的分叉副本.我真的希望Python中有一些魔法,我还不知道.

我认为这就是你要求的:

class MoreSpecificError(WebFault):

def __new__(self, old):

old.__class__ = MoreSpecificError

return old

但是,由于here所描述的原因,它存在风险.如果您正在做的只是捕获异常它应该可以工作,但不能保证.

我仍然认为以正常方式实际创建一个新的异常对象会更好.如果您担心丢失原始异常中的信息,请查看该异常的文档,以查看哪些信息记录为其公共API的一部分,并复制该信息.依赖于不属于原始API的异常信息的代码不是您需要支持新API的代码.

python 实例化父类对象_在Python中从现有超类实例化子类相关推荐

  1. python list存储对象_《python解释器源码剖析》第4章--python中的list对象

    4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...

  2. python 清空所有对象_学习python第38天

    今天分享一下python的内存管理和隔代回收 对象的内存使用 赋值语句是语言最常见的功能了.但即使是最简单的赋值语句,也可以很有内涵.Python的赋值语句就很值得研究. a = 1 整数1为一个对象 ...

  3. python创建模式对象_【python设计模式-创建型】单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对 ...

  4. java用接口实例化对象_[求助]迷茫中,接口可以直接实例化对象吗?

    可能是我没有写完整吧,还是我没有理解好 1 接口 public interface SetAndGetWeight { public void setW(double weight); public ...

  5. python函数赋值给对象_【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做到 ...

  6. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  7. python如何使用多态_在python 3中,如何将多态应用于类

    介绍 多态性是为不同的基础形式(例如,数据类型或类)利用同一接口的能力.这允许函数在不同时间使用不同类型的实体. 对于Python中的面向对象编程,这意味着可以用与属于特定类的特定对象相同的方式来使用 ...

  8. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  9. python提取ppt文本_提取PPT中的文字(包括图片中的文字)

    python是一门很强大的语言,因为有着丰富的第三方库,所以可以说Python是无所不能的. 很多人都知道,Python可以操作Excel,PDF·还有PPT,这篇文章就围绕Python提取PPT中的 ...

最新文章

  1. for和foreach分析
  2. 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)
  3. python拼接字符串的方法_python—字符串拼接三种方法
  4. Codeforces Round #741 (Div. 2)
  5. soapui 测试soap_使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分
  6. client 连接 host —— 虚拟机
  7. angular-数据绑定的最佳实践
  8. SQL语法中的JOIN类型
  9. 一张有转折意义的神秘地图
  10. IAR软件的使用讲解
  11. 关于桌面运维工程师的错题本(前言)
  12. 【最新】国内外激光雷达盘点及核心产品介绍
  13. 支付宝手机网站支付接口集成的经验小结
  14. Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 6 at lian39.main(lian39
  15. 一名软件测试工程师的一天24小时(每天在忙什么)
  16. 怎么让热图显示基因名_如何将 qPCR 数据做成热图
  17. pytorch如何freeze模型参数
  18. NVIDIA Jetson AGX Xavier
  19. 查看电脑当前使用的壁纸
  20. 手写tomcat socket closed_ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画202010元优惠券券后价65元...

热门文章

  1. java继承序列化_java中序列化之子类继承父类序列化
  2. cmd执行python 环境变量应该怎么写_python怎么运行py文件?.py文件cmd命令方法及环境变量配置教程...
  3. af_netlink_2、netlink简介
  4. zillow房价预测比赛_Kaggle竞赛 —— 房价预测 (House Prices)
  5. 史上最简单的玻尔兹曼机模型讲解
  6. 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结
  7. 清华团队CrossWOZ: 这篇顶会,助你徒手搭建任务导向对话系统
  8. Pytorch 中 matmul 广播
  9. 博弈论笔记--03--迭代剔除和中位选民定理
  10. Windows + Ubuntu下JDK与adb/android环境变量配置完整教程