python-物件導向入門

我要學程式設計發表於2018-08-17

一、物件導向介紹

介紹物件導向之前,先來回顧一下以前學的程式導向的程式設計思想

程式導向程式設計:

  核心是過程二字,過程指的是解決問題的步驟,即先幹什麼,再幹什麼後幹什麼,基於該思想程式設計就好比是在設計一條流水線,是一種機械化的思維方式

  優點:複雜的問題流程化,進而簡單化

  缺點:可擴充套件性差

現在輪到物件導向的程式設計思想了!

  物件導向程式設計,核心是物件二字,物件是特徵與技能的結合體,基於該思想編寫程式(腦子裡始終想的是物件二字),就好比創造一個世界,在上帝眼裡任何存在的事物都是物件,任何不存在的事物都可以造出來,是一種上帝式的思維方式

  優點:可擴充套件性強

  缺點:程式設計的複雜度要高於程式導向

二、類

物件是特徵與技能的結合體,而類則是一系列物件相同的特徵與技能的結合體

強調:

  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個物件!

焚膏油以繼晷,恆兀兀以窮年。


相關文章