python 实例化父类对象_在Python中从现有超类实例化子类
所以我正在與第三方庫進行交互,這會引發例外情況,但它基本上都會引發相同的異常(特別是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中从现有超类实例化子类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更改Ubuntu终端复制和粘贴的快捷键
- 下一篇: u盘锁电脑_程序员用U盘偷公司源码被抓;