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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/7/19 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 实例化父类对象_在Python中从现有超类实例化子类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

所以我正在與第三方庫進(jìn)行交互,這會引發(fā)例外情況,但它基本上都會引發(fā)相同的異常(特別是suds.WebFault.但是,有可能從異常引發(fā)的數(shù)據(jù)中確定異常的確切類型.我希望將這個(gè)異常抽象為子類化這種類型的異常,即:

from suds import WebFault

class MoreSpecificError(WebFault):

pass

我喜歡子類化,因?yàn)樗粫茐钠谕鸚ebFault的現(xiàn)有實(shí)現(xiàn).我遇到的問題是將WebFault上已有的數(shù)據(jù)傳遞給MoreSpecificError.我想做的是獲取現(xiàn)有的異常對象,然后將其“轉(zhuǎn)換為”子類,不做任何更改或重新運(yùn)行__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

編輯:我現(xiàn)在知道這不起作用,新對象將不是子類的類型

哪個(gè)“有用”,但是需要把__init__這個(gè)只是一個(gè)通行證感覺真的很重要.更不用說一些東西不喜歡自定義的__new__方法(閱讀:deepcopy,它不是一個(gè)選擇,我們使用的測試框架(生菜)使用它,我們已經(jīng)投入很多).

我想知道是否有更好的方法來做到這一點(diǎn)?我知道理想的方法是最初提升子類,但我真的不想開始使用這個(gè)庫的分叉副本.我真的希望Python中有一些魔法,我還不知道.

我認(rèn)為這就是你要求的:

class MoreSpecificError(WebFault):

def __new__(self, old):

old.__class__ = MoreSpecificError

return old

但是,由于here所描述的原因,它存在風(fēng)險(xiǎn).如果您正在做的只是捕獲異常它應(yīng)該可以工作,但不能保證.

我仍然認(rèn)為以正常方式實(shí)際創(chuàng)建一個(gè)新的異常對象會更好.如果您擔(dān)心丟失原始異常中的信息,請查看該異常的文檔,以查看哪些信息記錄為其公共API的一部分,并復(fù)制該信息.依賴于不屬于原始API的異常信息的代碼不是您需要支持新API的代碼.

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的python 实例化父类对象_在Python中从现有超类实例化子类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。