1. 程式人生 > >python類繼承與重構

python類繼承與重構

方法重寫 把他 名稱 count 前綴 派生類 數據結構 instance 指向

python類繼承與重構

0 對象

  • 通過類定義的數據結構實例。
  • 對象包括兩個數據成員(類變量和實例變量)和方法。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class Employee:
   ‘所有員工的基類‘
   empCount = 0
 
   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount
 
   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
      
  • empCount 變量是一個類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 Employee.empCount 訪問。
  • 第一種方法__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法
  • self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數

self代表類的實例,而非類

  • 類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。
class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = Test()
t.prt()

以上實例執行結果為:

<__main__.Test instance at 0x10d066878>
__main__.Test
  • 從執行結果可以很明顯的看出,self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類。
  • self 不是 python 關鍵字,我們把他換成 runoob 也是可以正常執行的:

  • 你可以添加,刪除,修改類的屬性。

類的繼承

  • 在python中繼承中的一些特點:
  1. 在繼承中基類的構造(init()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用。
  2. 在調用基類的方法時,需要加上基類的類名前綴,且需要帶上self參數變量。區別在於類中調用普通函數時並不需要帶上self參數
  3. Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查找。(先在本類中查找調用的方法,找不到才去基類中找)。

1 方法重寫

  • 如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。

python類繼承與重構