电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談Python中的繼承

瀏覽:8日期:2022-07-20 11:43:10

繼承

Python 中所有的類都是object類的子類,而object 繼承自type

繼承分為 接口繼承和實現繼承

接口繼承:使用父類的接口名,子類重寫這個方法。盡可能的繼承接口類,在子類中實現方法,鼓勵對接口類的多繼承,這樣遵循接口隔離原則,有利于歸一化設計,不提倡對抽象類進行多繼承

實現繼承:子類不需要實現任何東西,直接使用父類接口和實現會增強代碼的耦合性,不推薦使用。

一些細節

類繼承最終要被實例化,我們多數時候使用的還是對象而不是類。因此我們還是來一點點看繼~

繼承的過程

承僅僅是一種代碼復用的手段,并不會講代碼全部的加載到子類的空間中,方法依然屬于父類。下面的例子能看到,Cat.func 依然是 Animal 的,更近一步的理解,func 也僅僅是func,它只是被綁定到了類 Animal上而已,類 只是能幫我們找到這個函數,子類通過父類找到這個函數就完了~ 。

class Animal(object): def func(self): print('Animal.func')class Dog(Animal): def func(self): print(’Dog.func’)class Cat(Animal): ''' No func~ '''print(Animal.func) # <function Animal.func at 0x103f79620>print(Cat.func) # <function Animal.func at 0x103f79620>print(Dog.func) # <function Dog.func at 0x104073510>

實例化的過程

實例化過程中屬性和方法并不會出現在實例的空間里。它們依然屬于類本身,對象也只是能找到他們,然后調用他們。但是當修改對象的屬性時,會在對象的空間中創建同名的屬性。這是屬于對象的屬性。復雜的繼承其本質也是一樣的。

class Animal(object): def tell(self): print(’self.name:%s Animal.name %s ’ % (id(self.name), id(Animal.name))) name = ’Animal’class Cat(Animal): ''' No func~ ''' def tell(self): super().tell() print(’self.name %s Cat.name %s ’% (id(self.name), id(Cat.name)))cat = Cat()cat.tell()cat.name = ’django’cat.tell()# self.name:4473398472 Animal.name 4473398472 # self.name 4473398472 Cat.name 4473398472 # self.name:4474859736 Animal.name 4473398472 # self.name 4474859736 Cat.name 4473398472

單繼承

越靠近本類的方法會覆蓋祖輩的方法,這叫方法的覆蓋或重寫 原理是 Python的屬性檢索機制 從內層命名空間往外查詢

class MyClass(object): ''' A simple example class ''' MyClassName = ’MyClass’ name = ’MyClass’ def func(self): print('This is {}'.format(self.__class__.name)) def get_name(self): print(self.name)class MySonClass(MyClass): MySonClass = ’MySonClass’ name = ’MySonClass’ # 屬性的重寫 def get_name(self): super().get_name() print(’我重寫了父類的get_name方法,上面是父類的方法,我來自子類!’)person1 = MyClass()person2 = MySonClass()person1.func()person2.func() # 方法的實現繼承 自己沒有,會直接調用父類的方法。但是使用的屬性還是自己的。print(’*’*40)person1.get_name()person2.get_name() # 方法的接口繼承,在子類中重寫了這個方法。# 結果#------------------------------ # This is MyClass# This is MySonClass# ****************************************# MyClass# MySonClass# 我重寫了父類的get_name方法,上面是父類的方法,我來自子類!

多繼承

就形式上來說,類的繼承列表可以是一個,也可以是多個,當繼承列表只有一個類時,也就是只有一個父類時,稱為單繼承,大于一個類,就稱為多繼承。

新式類的繼承方式為 廣度優先繼承 經典類的繼承方式為 深度優先繼承。

類繼承的順序可以使用類的 __mro__ 方法查看。

鉆石繼承

class A(object): m = ’a’class B(A): m = ’b’class C(A): m = ’c’class D(B,C): # m = ’d’ passx = D()print(x.m)# D 的實例化對象如果獲取 m 屬性會優先的尋找自己的命名空間,查找順序為 D -> B -> C -> A

super()方法

語法super(類,實例化對象).父類的方法

當super()方法在類的內部使用時候,甚至不需要任何的參數

當在多繼承中使用super()方法的時候執行的不再是父類的方法了 而是和mro中上一級的方法

super()為了解決多繼承中,初始化方法被重復調用的問題。(當使用類名.方法名的時候)

當使用super()方法執行“父類” (__mro__ 方法的上一個類) 的方法

# 鉆石繼承中的 重復調用問題# 注意 繼承的查找順序~ 使用super()將按照 mro 順序執行class Grand(object): def __init__(self, name): self.name = name print('class Grand ')class SonLeft(Grand): def __init__(self, age, name): self.age = age Grand.__init__(self, name) # 注釋調 跑一跑 看一看 # super().__init__(age, name) print('class SonLeft')class SonRight(Grand): def __init__(self, gender, name): self.gender = gender Grand.__init__(self, name) # 注釋調 跑一跑 看一看 # super().__init__(name) print('class SonRight')class GrandSon(SonLeft, SonRight): def __init__(self, name, age, gender): # super().__init__(age, name) SonLeft.__init__(self, age, name) # 注釋調 跑一跑 看一看 SonRight.__init__(self, gender, name) # 注釋調 跑一跑 看一看 self.gender = gendergrand_son = GrandSon('Monkey', 18, '男')

以上就是淺談Python中的繼承的詳細內容,更多關于Python 繼承的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 动环监控_机房环境监控_DCIM_机房漏水检测-斯特纽 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 耐压仪-高压耐压仪|徐吉电气 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 船老大板材_浙江船老大全屋定制_船老大官网 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 微动开关厂家-东莞市德沃电子科技有限公司 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 小型气象站_车载气象站_便携气象站-山东风途物联网 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 湖南自考_湖南自学考试网 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 烽火安全网_加密软件、神盾软件官网 | 营养师网,营养师考试时间,报名入口—网站首页 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 |