python-面向對象入門
一、面向對象介紹
介紹面向對象之前,先來回顧一下以前學的面向過程的編程思想
面向過程編程:
核心是過程二字,過程指的是解決問題的步驟,即先幹什麽,再幹什麽後幹什麽,基於該思想編程就好比是在設計一條流水線,是一種機械化的思維方式
優點:復雜的問題流程化,進而簡單化
缺點:可擴展性差
現在輪到面向對象的編程思想了!
面向對象編程,核心是對象二字,對象是特征與技能的結合體,基於該思想編寫程序(腦子裏始終想的是對象二字),就好比創造一個世界,在上帝眼裏任何存在的事物都是對象,任何不存在的事物都可以造出來,是一種上帝式的思維方式
優點:可擴展性強
缺點:編程的復雜度要高於面向過程
二、類
對象是特征與技能的結合體,而類則是一系列對象相同的特征與技能的結合體
強調:
1.對象是具體存在的事物,而類則是一個抽象概念
2.站在不同的角度總結出的類與對象是不同的
在現實世界中,先有一個個具體存在的對象,然後隨著人類文明的發展才總結出類的概念
在程序中,先定義類,後調用類來產生對象
類體中最常見的就是變量和函數的定義,但類體中可以存在任意的python代碼。
定義類:
class語句創建一個新的類的定義,後面跟著冒號“:”
class Student: #相同的特征 school = ‘superschool‘ #相同的技能 def choose_course(self): print(‘choosing course‘)
類體代碼會在類定義階段立即執行,會產生一個類名稱空間,用來將類體代碼都丟進去。
查看類的名稱空間:
print(Student.__dict__)
修改,添加,刪除
Student.school = ‘SUPPER‘ Student.country = ‘China‘
del Student.country
總結類:
1.類本質上就是一個名稱空間,或者說是一個用來存放變量和函數的容器
2.類的用途之一就是當做名稱空間從其內部取出名字來使用
3.類的用途之二就是調用類來產生對象
對象:
調用類的過程稱之為類的實例化,調用類的返回值稱之為類的一個對象/實例
stu1 = Student()
為對象定制自己獨有的特性:
stu1.name=‘李鐵蛋‘ stu1.age=18 stu1.sex=‘male‘
stu2.name=‘趙鋼彈‘ stu2.age=38 stu2.sex=‘female‘
大家也註意到了,這裏存在了冗余代碼,我們來優化一下
def init(obj,name,age,sex): obj.name = name obj.age = age obj.sex = sex
產生的對象通過每次調用函數能夠更簡便,還有沒有更好的方法呢?答案肯定是有的
class Student: #相同的特征 school = ‘oldboy‘ # stu1,‘李鐵蛋‘,18,‘male‘ def __init__(obj, name, age, sex): obj.name = name #stu1.name=‘李鐵蛋‘ obj.age = age #stu1.age=18 obj.sex = sex #stu1.sex=‘male‘ #相同的技能 def choose_course(self): print(‘choosing course‘)
調用類會先產生一個空對象stul,然後返回,觸發類中的__init__的執行,將對象連同調用類括號裏指定的參數一同傳入
stu1=Student(‘李鐵蛋‘,18,‘male‘) #__init__(stu1,‘李鐵蛋‘,18,‘male‘) stu2=Student(‘趙鋼彈‘,38,‘female‘) #__init__(stu2,‘趙彈‘,38,‘female‘)
總結__init__的功能:是在實例化時就為對象初始自己獨有的屬性,要註意的是不能有返回值,默認返回None
屬性查找:
1.先從對象自己的名稱空間中找,沒有則去所屬的類中找
2.類中定義的變量是所有對象共享的,對象可以用來用,類也可以來使用,類一旦改變自己的數據屬性的值,所有對象都能感知到。
綁定方法:
類中定義的函數是是類的函數屬性,類可以用,類調用就是一個普通函數,但其實類中定義的函數是給對象用的,而且是綁定給對象用的
1.類的函數:該傳幾個參數就傳幾個
2.綁定方法,指向類的函數:特殊之處是綁定給誰就由誰來調用,誰來調用就會當做第一個參數自動傳入。
三、一切皆對象
在python3中統一了類與類型的概念
class Foo: pass print(Foo) obj=Foo() print(type(obj)) print(int) age=10 #age=int(10) print(type(age)) l1=[1,2,3] #l1=list([1,2,3]) # print(type(l1)) # l1.append(4) # print(l1) l1.append(4) # list.append(l1,4) print(l1)
l1.append就相當於調用了list類中的append函數
面向對象後期繼續補充,七夕剛好new個對象!
python-面向對象入門