類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。類是一個模板,它描述一類對象的狀態和行為,把這個模板實現以后,就是一個對象
類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。
數據成員:類變量或者實例變量, 用於處理類及其實例對象的相關的數據。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
局部變量:定義在方法中的變量,只作用於當前實例的類。
實例變量:在類的聲明中,屬性是用變量來表示的。這種變量就稱為實例變量,是在類聲明的內部但是在類的其他成員方法之外聲明的。
繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。
實例化:創建一個類的實例,類的具體對象。
方法:類中定義的函數。
對象:對象是類的一個實例,有狀態和行為。對象包括兩個數據成員(類變量和實例變量)和方法。
python主方法入口:if __name__ == '__main__':
Python3中的object為所有類的基類,所有類在創建時默認繼承object,所以不聲明繼承object也可以,如:class className(object): 與 class className():
類下面方法的創建同樣適用關鍵字def,唯一不同的是,方法的第一個參數必須是存在的,一般習慣命名為'self',但是在調用這個方法時不需要為這個參數傳值.類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。
一般在創建類時會首先聲明初始化方法__init__(),類似於java中的構造函數.__init__()方法是一種特殊的方法,當創建了這個類的實例時就會調用該方法
使用點號 . 來訪問對象的屬性,還可以添加,刪除,修改類的屬性
在調用基類的方法時,需要加上基類的類名前綴,且需要帶上 self 參數變量。區別在於類中調用普通函數時並不需要帶上 self 參數
類中函數體之外的變量叫類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 類名.變量 訪問。
如果在子類中需要父類的構造方法就需要顯式地調用父類的構造方法,或者不重寫父類的構造方法。
子類不重寫 __init__,實例化子類時,會自動調用父類定義的 __init__。
如果重寫了__init__ 時,要繼承父類的構造方法,可以使用 super 關鍵字:super(子類,self).__init__(參數1,參數2,....)還有一種經典寫法:父類名稱.__init__(self,參數1,參數2,...)
1 class person(): 2 def __init__(self,name): 3 self.name = name 4 def sayHi(self): 5 print('Hello,my name is',self.name) 6 if __name__ == '__main__': 7 person('Nancy').sayHi() 8 #運行結果
9 Hello,my name is Nancy
1 class A(object):#創建一個類,類名為A,繼承object.
2 # python3中object為所有類的基類,所有類在創建時默認集成object,所以不聲明繼承object也可以.
3 def add(self,a,b):#類A中有一個方法add
4 return a+b 5 class B(A):#類B繼承類A,具有類A的所有方法
6 def sub(self,a,b): #類B除了繼承外,自己還新增了方法.可以理解為徒弟繼承了師傅的所有技能,又自學了其他技能
7 return a-b 8 if __name__ == '__main__':#python主方法入口,可理解為執行入口,從此開始執行
9 count1 = A() 10 print(count1.add(5,9)) 11 count2 = B() 12 print(count2.add(5,9))#調用執行類B中的add方法
13 print(count2.sub(5,9))#調用執行類B中的sub方法
14 #運行結果
15 14
16 14
17 -4
1 class Employee(): 2 empCount = 0 3 def __init__(self,name,salary): 4 self.name = name 5 self.salary = salary 6 Employee.empCount += 1
7 def displayCount(self): 8 print("Total Employee %d" % Employee.empCount) 9 def displayEmployee(self): 10 print("Name:",self.name,",Salary:",self.salary) 11 emp1 = Employee("Nancy",2000) 12 emp2 = Employee("Lucy",5000) 13 emp1.displayEmployee() 14 emp2.displayEmployee() 15 print("Total Employee %d" % Employee.empCount) 16 #運行結果
17 Name: Nancy ,Salary: 2000
18 Name: Lucy ,Salary: 5000
19 Total Employee 2
1 class Employee(): 2 empCount = 0#empCount 變量是一個類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 Employee.empCount 訪問。 3 def __init__(self,name,salary): 4 self.name = name 5 self.salary = salary 6 Employee.empCount += 1 7 def displayCount(self): 8 print("Total Employee %d" % Employee.empCount) 9 def displayEmployee(self): 10 print("Name:",self.name,",Salary:",self.salary) 11 emp1 = Employee("Nancy",2000)#創建Employee類的第一個對象 12 emp2 = Employee("Lucy",5000)#創建Employee類的第二個對象 13 emp1.displayEmployee()#調用Employee類的displayEmployee方法 14 emp2.displayEmployee()#調用Employee類的displayEmployee方法 15 print("Total Employee %d" % Employee.empCount)#empCount 變量是一個類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 Employee.empCount 訪問。
16 #運行結果 17 Name: Nancy ,Salary: 2000 18 Name: Lucy ,Salary: 5000 19 Total Employee 2
繼承:
如果在子類中需要父類的構造方法就需要顯式地調用父類的構造方法,或者不重寫父類的構造方法。
子類不重寫 __init__,實例化子類時,會自動調用父類定義的 __init__。
如果重寫了__init__ 時,要繼承父類的構造方法,可以使用 super 關鍵字:super(子類,self).__init__(參數1,參數2,....)還有一種經典寫法:父類名稱.__init__(self,參數1,參數2,...)
1 class Son(Father): 2 def getName(self): 3 return 'Son ' + self.name 4
5
6 if __name__ == '__main__': 7 son = Son('runoob') 8 print(son.getName()) 9 #運行結果
10 name: runoob 11 Son runoob 12 #子類不重寫 __init__,實例化子類時,會自動調用父類定義的 __init__
1 class Father(object): 2 def __init__(self, name): 3 self.name=name 4 print ( "name: %s" %( self.name)) 5 def getName(self): 6 return 'Father ' + self.name 7
8 class Son(Father): 9 def __init__(self, name): 10 super(Son, self).__init__(name) 11 print ("hi") 12 self.name = name 13 def getName(self): 14 return 'Son '+self.name 15
16 if __name__=='__main__': 17 son=Son('runoob') 18 print ( son.getName() ) 19 #運行結果
20 name: runoob 21 hi 22 Son runoob
