日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/7/19 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中从现有超类实例化子类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。