另一個世界系列:Python高級之面向對象(四)

最近的忙碌,進階比較緩慢
前面的三篇主要講Python的基礎部分,第四篇爲Python高級部分面向對象

記錄點

面向對象-封裝(2019-8-22)

  • 類 - class
  • 對象
class Student():     #定義一個類
   name = ''    #定義變量
   age = 0

   def print_file(self):    #定義一個方法
       print("name:"+self.name)
       print('age:'+str(self.age))    #輸出

student =Student()    #實例化一個對象
student.print_file()    #調用方法

注:self 在每個方法括號中都必須寫上,這個相當於java中的 this 關鍵字。
但 self按嚴格來說它不是python的關鍵字,self可以是任何符合的字符串,只是python官方推薦使用 self 而已

類與對象:類像一個模板一樣,可以產生各種各樣的對象

  • 構造函數
 def __init__(self,name):    #構造函數
        self.name=name
        self.source= 0
        print(name) #調用實例變量 方式1
        print(self.name) #調用實例變量 方式2
        print(self.__class__.name)#調用類變量 方式1

部分特性和java差不多

類變量和實例變量(2019-8-26)

實例變量:通過實例對象調用的變量和在構造函數中定義過的 如上述構造函數類代碼

print(name) #調用實例變量 方式1
print(self.name) #調用實例變量 方式2

類變量:通過類名直接調用的,或者在實例函數中使用 self.class.變量名調用的 如上述代碼

print(self.__class__.name)  #調用類變量 方式1
Student.name  #調用類變量 方式2

方法

實例方法
就是一般的定義方法,關聯實例對象

def show(self):
	pass

注:關鍵字 pass 相當於一個佔位 在還沒想好邏輯的時候可以使用它 反正代碼報錯

類方法
方法上使用裝飾器 @classmethod 以及必傳參數 cls

#類方法
@classmethod  
def plus_sum(cls):
    cls.sum +=1  
    print(cls.sum)    #調用類變量

注: cls 字符串 和self的作用差不多,只是只能用在類方法上

在類方法中調用類變量的方式與實例方法不同

self.__calss__.name    #實例方法調用類變量
cls.name   #類方法調用類變量

靜態方法
方法上使用裝飾器 @staticmethod,和類方法的區別就是不用傳cls, 一般不推薦使用

  #靜態方法
 @staticmethod  
 def plus_sum():
     pass

要點:一般保證數據的安全不能直接給數據賦值,要在方法中進行完成,方法中可以進行判斷,體現了python的面向對象的封裝性

私有

私有方法
在方法前面加 ‘__’ 雙下劃線

def  __sum(self):
	pass

私有方法外部強行調用會報錯
私有變量
在變量前面加 ‘__’ 雙下劃線

__name = '小米'

無法進行私有變量調用,

student = Student() #實例化
print(student.__name)  

因爲python的動態機制,這裏其實是重新定義了一個變量 __name
可以使用 _dict _ 來查看當前對象的所以變量信息

print(student.__dict__)   #輸出詳細

可以從輸出的內容中可以看到,原來的變量變成了 類名加變量名 如:_Student__name

面向對象-繼承(2019-8-28)

python的繼承特性和java的繼承特性差不多,相信有java繼承的會更好的理解

父類

#父類  2019-8-28
class Human():

    sum = 0
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def show(self):
        print("父類的方法")

子類

from m4 import Human   #導入父類   m4爲文件名     Human爲類名
class Student(Human):  #繼承父類
    
    def __init__(self,school,name,age):
        self.school=school
       
        #調用父類的構造函數  需要加入self   方式一
        Human.__init__(self,name,age)
        #方式二  使用super關鍵字
        super(Student,self).__init__(name,age)
    
    def out(self):
        #調用父類方法
        super(Student,self).show()
        print("加油")

ss =  Student('社會','44',5)
print(ss.name)
print(ss.age)
ss.out()

調用父類的兩種方式
方式一

 #調用父類的構造函數  需要加入self   方式一
 Human.__init__(self,name,age)

方式二
使用關鍵字 super

#方式二  使用super關鍵字
super(Student,self).__init__(name,age)

面向對象-多態(- - -)


完整代碼獲取: 點擊此處.


github地址:RemainderTime.
個人博客地址:夢麟繁花(ps:還在完善中…)
簡書:RemainderTime
網易雲音樂ID: remaindertime


撲向未來!
加油

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章