首頁 後端開發 Python教學 Python零基礎入門十四之繼承

Python零基礎入門十四之繼承

Jan 16, 2017 pm 02:42 PM

在之前的部落格中簡單地說了關於類別的繼承的語法,今天在具體的說一下類別的相關的知識。
先用一段程式碼溫習一下之前學過的類別的繼承:

class Parent:
     def hello(self):
          print("正在调用父类的方法.....")class Child(Parent):
    # pass
    def hello(self):
         print("正在调用子类的方法.....")
p=Parent()
p.hello()
c=Child()
c.hello()
登入後複製

Python零基礎入門十四之繼承


在類別的繼承中需要注意的幾個問題: 
(1)如果子類別中定義與父類別同名的方法或屬性則會自動覆寫父類別對應的方法或屬性。

import random as rclass Fish:
     def __init__(self):
          self.x=r.randint(0,10)
          self.y=r.randint(0,10)     def move(self):
          self.x-=1
          print("我的位置是:",self.x,self.y)class Goldfish(Fish):
     passclass Carp(Fish):
     passclass Salmon(Fish):
     passclass Shark(Fish):
     def __init__(self):
          #调用未绑定的父类方法,传进去的是子类的实例化对象
          #Fish.__init__(self)
          #使用super()函数
          super().__init__()
          self.hungry=True
     def eat(self):
          if self.hungry:
               print("吃货的梦想是天天有的吃")
               self.hungry=False
          else:
               print("太撑了,吃不下了")
shark=Shark()
shark.move()#这样写的话程序会报错,因为子类Shark重写了了#__init__方法,这样就会覆盖父类的__init__方法
登入後複製

(2)Python也支援多重繼承

class Base1:
     def foo1(self):
          print("我是foo1,我为Base1代言...")class Base2:
     def foo2(self):
          print("我是foo2,我为Base2代言...")class C(Base1,Base2):
     passc=C()
c.foo1()
c.foo2()
登入後複製

Python零基礎入門十四之繼承

(3)當幾個類別之間沒有直接的繼承關係時我們可以使用組合。 
例如下面程式碼中的Turtle、Fish、Pool三個類,它們之間並沒有明顯的繼承關係,但是使用組合卻可以很方便的解決這幾個類別之間的問題。下面程式碼就解決了輸出池塘中有多少隻金魚和烏龜的問題。主要解決方法就是將烏龜和金魚類的實例化放進池塘的類中。

class Turtle:
     def __init__(self,x):
          self.num=xclass Fish:
     def __init__(self,x):
          self.num=xclass Pool:
     def __init__(self,x,y):
          #将类的实例化放到另一个类中
          self.turtle=Turtle(x)
          self.fish=Fish(y)     def print_num(self):
          print("水池里总共有乌龟%d只,小鱼%d条!"%(self.turtle.num,self.fish.num))
pool=Pool(1,10)
pool.print_num()
登入後複製

最後補充一些關於類別的內建函數:

#前面是子类,后面是基类
#issubclass(class,classinfo)
#判断一个类是否为另一个类的子类
#一个类被认为是自身的子类class A:
     passclass B(A):
     passprint(issubclass(B,A))
#isinstance(object,classinfo)
#前面是一个实例化对象,后面是类#检查实例对象是否属于这个类b1=B();
print(isinstance(b1,B))
#hasattr(object,name)
#测试一个对象是否有特定的属性class C:
     def __init__(self,x=0):
          self.x=x#一定要注意Python没有变量的定义c1=C()
print(hasattr(c1,"x"))
#getattr(object,name[,default])
#返回对象指定的属性值,如果不存在,打印设置的默认值print(getattr(c1,'x'))
print(getattr(c1,'y',"您访问的参数不存在"))
#setattr(object,name,value)
#设定属性的值,如果不存在,会自动新建setattr(c1,"y","Yaoxiangxi")
print(getattr(c1,'y',"您访问的参数不存在"))#delattr(object,name)
#删除属性delattr(c1,'y')
#property(fget=None,fset=None,fdel=None,doc=None)
#通过属性设置属性class C:
     def __init__(self,size=10):
          self.size=size     def getSize(self):
          return self.size     def setSize(self,value):
          self.size=value     def delSize(self):
          del self.size #删除某个属性
     #便于代码的修改
     x=property(getSize,setSize,delSize)
c1=C()
print(c1.getSize())
print(c1.x)
c1.x=100print(c1.x)
登入後複製

Python零基礎入門十四之繼承

關於最後的property將在描述符的部落格中做詳細的解釋。

以上就是Python零基礎入門十四之繼承的內容,更多相關內容請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解釋self ::,parent ::和static :: in php oop中的區別。 解釋self ::,parent ::和static :: in php oop中的區別。 Apr 09, 2025 am 12:04 AM

在PHPOOP中,self::引用當前類,parent::引用父類,static::用於晚靜態綁定。 1.self::用於靜態方法和常量調用,但不支持晚靜態綁定。 2.parent::用於子類調用父類方法,無法訪問私有方法。 3.static::支持晚靜態綁定,適用於繼承和多態,但可能影響代碼可讀性。

HadiDB:Python 中的輕量級、可水平擴展的數據庫 HadiDB:Python 中的輕量級、可水平擴展的數據庫 Apr 08, 2025 pm 06:12 PM

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

Navicat查看MongoDB數據庫密碼的方法 Navicat查看MongoDB數據庫密碼的方法 Apr 08, 2025 pm 09:39 PM

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

如何將 AWS Glue 爬網程序與 Amazon Athena 結合使用 如何將 AWS Glue 爬網程序與 Amazon Athena 結合使用 Apr 09, 2025 pm 03:09 PM

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。

redis怎麼啟動服務器 redis怎麼啟動服務器 Apr 10, 2025 pm 08:12 PM

啟動 Redis 服務器的步驟包括:根據操作系統安裝 Redis。通過 redis-server(Linux/macOS)或 redis-server.exe(Windows)啟動 Redis 服務。使用 redis-cli ping(Linux/macOS)或 redis-cli.exe ping(Windows)命令檢查服務狀態。使用 Redis 客戶端,如 redis-cli、Python 或 Node.js,訪問服務器。

redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

See all articles