一、面向過程編程(針對擴展性要求不高的程序,可使用面向過程編程)
面向過程編程(重點在於過程):在使用面向過程編程時首相想到的是解決問題的步驟,即先幹什麼、再幹什麼、最後幹什麼。
優點:把複雜的問題流程化、進而簡化
缺點:可擴展性差
二、面向對象編程(用在擴展性強的程序上(與用戶交互上))
核心是對象二字,面向對象是特徵(指變量)與技能(指函數)的結合體。
優點:擴展性強
缺點:編程的複雜度高
三、定義類
類:是一系列對象相似的特徵與技能的結合體(站在不同的角度總結出的類是截然不同的)
在程序中:一定要先定義類,後調用類產生對象
例子:
對象1:學生
特徵
school='Oldboy'
name='李泰迪'
sex='male'
age=18
技能
選課
對象2:學生
特徵
school='Oldboy'
name='張隨便'
sex='male'
age=38
技能
選課
對象3:老師
特徵
name='Egon'
sex='male'
age=18
level=10
技能
打分
點名
總結:
學生之間相似的特徵:school='Oldboy'
學生之間相似的技能:選課
3.1、類的使用及用法
'''在程序中:先定義類(定義類主要是爲了用)''' '''類在定義階段就會執行代碼,會產生類的名稱空間''' class OldboyStudent: #類並不是一個真正存在的東西,它是一個抽象的概念(這裏表示school='Oldboy') #相似的特徵: school='Oldboy' def choose_course(self): print('is choose_course') print(OldboyStudent.__dict__) #打印類定義的名稱空間 print(OldboyStudent.__dict__['school']) #去名稱空間內的"school"對應的值 # >>:Oldboy print(OldboyStudent.school) #本質就是取"OldboyStudent.__dict__['school']"的值(OldboyStudent名稱空間內"school"的值) # >>:Oldboy OldboyStudent.choose_course(123) #調用類的容器"choose_course",由於choose_course本身是一個函數,那麼就按照函數的寫法來調用 # >>:is choose_course '''類的用法:增刪改查''' OldboyStudent.country='China' #增加一條數據 OldboyStudent.school='Oldgirl' #修改數據,把'Oldboy'修改爲'Oldgirl' print(OldboyStudent.__dict__) del OldboyStudent.school #在類(一個容器)裏面把school給刪掉 print(OldboyStudent.__dict__)總結類的用途:2種
1、調用類產生對象
2、類本身就是一個容器,裏面有很多名稱空間定義好的名稱,可以直接取
3.2、對象的使用及用法
'''後調用類,產生對象。調用類的過程又稱爲實例化''' #一、先定義類 class OldboyStudent: school='Oldboy' def choose_course(self): print('is choose_course') #二、後調用類 stu1=OldboyStudent() #stu1是一個對象,也可以說是一個實例 stu2=OldboyStudent() #stu2是一個對象,也可以說是一個實例 def init(obj,x,y,z): #定義一個函數,obj這裏要傳對象,x,y,z分別傳學生的name,sex,age obj.name=x obj.sex=y obj.age=z init(stu1,'李泰迪','male',18) #調用函數init實際上就是給對象賦值的一個過程,即: # stu1.name='李泰迪' # stu1.sex='male' # stu1.age=18 init(stu2,'張隨便','famale',38) # stu1.name='張隨便' # stu1.sex='famale' # stu1.age=38 print(stu1.__dict__) #打印對象stu1的名稱空間,可得出名稱空間的值有哪些 >>:{'name': '李泰迪', 'sex': 'male', 'age': 18} print(stu2.__dict__) #打印對象stu2的名稱空間,可得出名稱空間的值有哪些 >>:{'name': '張隨便', 'sex': 'famale', 'age': 38}
3.3、對象的使用及用法(升級版)
'''後調用類,產生對象。調用類的過程又稱爲實例化''' #一、先定義類 class OldboyStudent: school='Oldboy' def __init__(self, x, y, z): #定義對象的特徵(name,age,sex) self.name = x self.sex = y self.age = z def choose_course(self): print('is choose_course') #會在調用類時,或者叫實例化時自動觸發__init__(stu1,) #二、後調用類 stu1=OldboyStudent('李泰迪','male',18) stu2=OldboyStudent('張隨便','famale',38) print(stu1.__dict__) >>:{'name': '李泰迪', 'sex': 'male', 'age': 18} print(stu2.__dict__) >>:{'name': '張隨便', 'sex': 'famale', 'age': 38}總結對象的用途:
1、對象的屬性查找是先從對象本身的名稱空間找,找不到則取類的名稱空間中查找,2者都找不到則報錯
3.2.1、修改對象名稱空間的值與修改類名稱空間的值
#一、先定義類 class OldboyStudent: school='Oldboy' def __init__(self, x, y, z): self.name = x self.sex = y self.age = z def choose_course(self): print('is choose_course') #二、後調用類 stu1=OldboyStudent('李泰迪','male',18) stu2=OldboyStudent('張隨便','famale',38) # 修改對象下的名稱空間的值只針對對象本身的名稱空間生效 stu1.school='Sudada' print(stu1.school) >>:Sudada print(stu2.school) >>:Oldboy # 修改類下的名稱空間的值,那麼引用該類的對象的名稱空間的值也會被修改 OldboyStudent.school='Sudada' print(stu1.school) >>:Sudada print(stu2.school) >>:Sudada
3.2.2、類對象綁定方法的使用
class OldboyStudent: school='Oldboy' def __init__(self, x, y, z): self.name = x self.sex = y self.age = z def choose_course(self): print('%s is choose_course' %self.name) stu1=OldboyStudent('李泰迪','male',18) stu2=OldboyStudent('張隨便','famale',38) # 綁定方法的特殊點: # 1、綁定給誰就由誰來調用 # 2、誰來調用,就會將誰當做第一個參數自動傳入 print(stu1.choose_course) # >>:<bound method OldboyStudent.choose_course of <__main__.OldboyStudent object at 0x0000023031B562B0>> stu1.choose_course() #對象的調用實際上是在調用OldboyStudent.choose_course(stu1) # >>:李泰迪 is choose_course OldboyStudent.choose_course(stu1) # >>:李泰迪 is choose_course
綁定方法的特殊點:
1、綁定給誰就由誰來調用
2、誰來調用,就會將誰當做第一個參數自動傳入