1. 程式人生 > >python-面向對象入門

python-面向對象入門

類定義 不存在 country course school 都是 int 好的 初始

一、面向對象介紹

介紹面向對象之前,先來回顧一下以前學的面向過程的編程思想

面向過程編程:

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

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

  缺點:可擴展性差

現在輪到面向對象的編程思想了!

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

  優點:可擴展性強

  缺點:編程的復雜度要高於面向過程

二、類

對象是特征與技能的結合體,而類則是一系列對象相同的特征與技能的結合體

強調:

  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-面向對象入門