''' 模塊 module 每一個(gè).py結(jié)尾的源文件都是一個(gè)模塊 模塊方便代碼的維護(hù) 方便代碼的復(fù)用 使用模塊可以避免命名沖突 包 package 包本質(zhì)上就是一個(gè)文件夾 在模塊名前添加包名可避免模塊命名沖突 python.day04.demo01 python.day05.demo01 每一個(gè)包目錄下都有一個(gè)__init__.py的模塊 如果沒有,則python把該目錄當(dāng)做普通目錄處理 ''' import sys def test(): # 調(diào)用系統(tǒng)模塊獲取命令行參數(shù) args = sys.argv print(args) # test() # 測試代碼 if __name__ == "__main__": test() # 導(dǎo)入模塊的所有內(nèi)容 # import demo01 # demo01.test() # 導(dǎo)入模塊中指定的內(nèi)容 from demo01 import test test() ''' 面向?qū)ο缶幊?/font> —— oop object oriented programming 程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu) ''' # 創(chuàng)建一個(gè)學(xué)生類 # 通過class關(guān)鍵字創(chuàng)建類,類名首字母要大寫 class Student: # 方法method # __init__(self)方法也稱為構(gòu)造方法-constructor # 類中每一個(gè)方法的第一個(gè)參數(shù)都必須是self,且該參數(shù)由系統(tǒng)自動傳參 def __init__(self): pass # 創(chuàng)建對象——調(diào)用Student類的構(gòu)造方法創(chuàng)建一個(gè)該類的實(shí)例-instance tom = Student() # 添加數(shù)據(jù) tom.name = 'Tom Cruse' tom.age = 22 tom.gender = '男' print(tom.name) mike = Student() mike.name = 'Michael Jordan' print(mike) print(tom) class Dog: def __init__(self,name,age,color,weight): # 定義類的屬性(數(shù)據(jù)) # self:代詞,指代當(dāng)前對象 ''' 變量的作用域 name是局部變量,它的作用范圍僅限于定義它的函數(shù)或方法內(nèi)部 self.name是成員變量,它的作用范圍是定義它的類的內(nèi)部 __xxx,變量名前面有兩個(gè)下劃線表示該變量是一個(gè)私有變量 私有變量只允許從類的內(nèi)部訪問,不能從外部訪問 ''' self.__name = name self.__age = age self.__color = color self.__weight = weight ''' 封裝 把數(shù)據(jù)和處理數(shù)據(jù)的邏輯封裝起來 調(diào)用方便,且不需要知道內(nèi)部的實(shí)現(xiàn)細(xì)節(jié) ''' def show(self): print(self.__name,self.__age,self.__color,self.__weight) # 私有變量可修改 # getter/setter方法,用于讀寫對象的屬性 def set_name(self,name): self.__name = name def get_name(self): return self.__name def set_age(self,age): if age > 0 and age <= 15: self.__age = age else: # 拋出異常 raise NameError('錯誤年齡!') def get_age(self): return self.__age def set_weight(self,weight): if weight > 0 and weight <= 50: self.__weight = weight else: raise NameError('錯誤體重!') def get_weight(self): return self.__weight wangcai = Dog('旺財(cái)',4,'黃白','蘇格蘭牧羊犬') # print(wangcai.name) wangcai.show() wangcai.set_age(10) # wangcai.set_age(-10) # wangcai.set_weight(-10) lai = Dog('來福',3,'黑','拉布拉多') # print(lai.name) lai.show() ''' object類是所有其他類的父類 如果一個(gè)類的父類是object,可以不寫 ''' class Animal: # 如果沒有顯示的提供構(gòu)造方法,程序會提供一個(gè)默認(rèn)的構(gòu)造方法 def run(self): print('動物正在跑...') ''' 繼承 Dog類繼承了Animal類,Dog類稱為子類,Animal類稱為父類 好處:子類可以獲得父類的全部功能(包括屬性和方法) 繼承的同時(shí),子類也可以有自己的方法 并且子類可以對繼承自父類的方法進(jìn)行重寫 ''' class Dog(Animal): def bark(self): print('汪汪汪...') # 重寫 override def run(self): print('狗在跑...') class Cat(Animal): def eat(self): print('吃魚...') def run(self): print('貓爬樹...') a = Animal() print(a) dog = Dog() dog.run() dog.bark() cat = Cat() cat.run() cat.eat() ''' 多態(tài) 同一個(gè)對象在不同的場合表現(xiàn)出不同的狀態(tài)稱之為多態(tài) 多態(tài)可以簡化方法的調(diào)用 ''' # isinstance(),判斷某個(gè)對象是否是某個(gè)類的實(shí)例 print(isinstance(dog,Dog)) print(isinstance(dog,Cat)) print(isinstance(dog,Animal)) def run_twice(animal): animal.run() animal.run() run_twice(a) run_twice(dog) run_twice(cat) |