python物件導向思想(類與物件)

微信1257309054發表於2018-05-02

物件導向思想

1、物件導向的設計思想

物件導向是基於萬物皆物件這個哲學觀點。

2、物件導向和麵向過程的區別

程式導向

在生活中:

它是一種看待問題的思維方式,在思考問題的時候,著眼問題是怎樣一步一步解決的,然後親力親為去解決問題[類似於公司裡的執行者]。

在程式中:

​ 程式碼是從上而下順序執行,各個模組之間的關係儘可能簡單,在功能上相對獨立,程式的流程在寫程式的時候就已經決定。

物件導向

在生活中:

它是另一種看待問題的方式,它著眼於找到一個具有特殊功能的個體,然後委託這個個體去幫你完成某件事.這更符合人類思考習慣的思想[指揮者]。

在程式中:

把資料以及對資料的操作方法放在一起,作為一個相互依存的整體–物件;

把同類的物件進行抽象出其共性,形成類;

類中大多數資料,只能用本類的方法進行處理;

類通過一個簡單的外部介面與外界發生關係,物件與物件之間通過訊息進行通訊;

程式執行的流程由使用者在使用的過程中決定;

使用物件導向思想進行開發,需要先找到具有所需功能的物件來使用,如果這個物件不存在,那麼則需要建立這麼一個具有所需功能的物件。

注意:物件導向只是一種思想,並不是一門程式語言。

區別總結

a. 都是看待問題的一種思維方式,都能解決問題;

b. 程式導向著眼於所有的事情親力親為;

c. 物件導向著眼於找到一個具有特殊功能的物件,委託這個物件實現你需要實現的功能。

python語言是物件導向的程式設計語言,類和物件是物件導向的核心。

類和物件

1、類和物件的概念

:一個具有特殊功能的實體的集合[群體]。

物件:在一個類中,一個具有特殊功能的實體,能夠幫忙解決特定的問題,物件通常也被稱為例項。

兩者之間的關係:類用於描述某一物件的共同特徵,而物件則是類的具體存在

舉例:

學生 張三、李四

快遞 順豐、韻達

總結:

類與物件的關係:

a.類是物件的抽象,物件是類的具體體現。

b.類也是一種資料型別,只不過是自己定義的,類似與number,string等,它本身並不佔用空間,但是它的例項[物件]是佔用空間的。

2、類的定義

格式:

class 類名(object):

​ 類體

說明:

a.python中使用class關鍵字定義類;

b.類名只要是一個合法的識別符號即可,命名規則遵循”大駝峰式命名”【每個單詞的首字母大寫】;

c.儘量使用單個或者多個有意義的單詞連線而成

演示

# 一個簡單的類的例項
class Person():
    print("hello")
3、類的設計

只需要關心3樣東西

1.事物名稱[類名]: 如人類 (Person);

2.特徵(屬性): 如身高(height) 年齡(age)等 ——>名詞;

3.行為(方法): 如跑(run) 說話(say) —————>動詞。

二十一、類中的方法和屬性

1、方法和屬性的定義

生活中描述事物的無非就是描述事物的特徵和行為。

python中用類來描述事物也是如此,前面已經定義了類,但是,如果只有類單獨存在,沒有任何意義,所以定義類其實就是定義類中的成員[成員變數和成員方法]。

在類中的變數我們稱之為成員變數,在類中的方法我們稱之為成員方法(函式)。

成員變數—>類具有的特徵 例如:人—>身高,性別,體重。

成員方法 —>類具有的行為 例如人—>吃喝玩樂。

因此,擁有相同的(或者類似)屬性和行為的物件都可以抽取出一個類。

class Persion():
    #成員變數,初始值就是相當於預設值
    name = ""
    age = 0
    height = 0
    weight = 0
    #成員方法
    #在類的內部,使用def關鍵字來定義的一個方法
    #注意:區別於普通方法,類中方法的引數必須包含引數self,且為第一個引數
    #self代表類的例項(某個物件)
    def run(self):
        print("run")

    def eat(self, food):
        print("eat",food)

    def sleep(self):
        print("sleeping")    

說明:定義了類,並在類中定義了成員變數和成員方法,但是成員變數和成員方法是如何使用的呢?

2、方法和屬性的使用
2.1、例項化物件:

前面說過,物件是實實在在的個體,負責去完成某件指定的事情。

物件的建立的過程又被稱作物件的例項化過程。

語法:

物件名 = 類名()

'''
例項化物件
格式: 物件名 = 類名()
注意: 沒有引數的時候,小括號也不能省略
'''

#例項化一個物件
pre1 = Person()
print(pre1)
print(type(per1))
print(id(per1))

per2 = Person()
print(per2)
print(type(per2))
print(id(per2))
3、物件呼叫方法和屬性
per = Preson()
'''
訪問屬性
格式:物件名.屬性名
賦值:物件名.屬性名 = 新值
'''
per.name = 'lili'
per.age = 18
per.height = 160
per.weight = 80
print(per.name, per.age, per.height, per.weight)

'''
訪問方法
格式:物件名.方法名(引數列表)
'''
per.run()
per.eat("apple")
per.sleep()

#問題:目前來看Person建立的所有物件屬性都是一樣的
per2 = Person()
print(per2.age)
per3 = Person()
print(per3.age)

總結:

訪問變數採用: 物件名.屬性名;

訪問方法採用: 物件名.方法名(引數列表)。

4、記憶體中的物件

per = Person()

說明:程式中定義Person型別的變數per實際是一個變數名,它被存放在棧記憶體中,它指向實際的Person物件,而真正的Person物件則存放在堆記憶體中。

綜合練習:

第一天開學,介紹一下你自己其中包括姓名,年齡以及愛好

#學生類
class Student():
    #特徵:成員變數
    self.name = ""
    self.age = ""
    self.hobby =""

    def introduce(self,name, age, hobby):
        print("大家好,我是%s,今年%d歲,愛好是%s"%(name,age, hobby))

    def singsong(self):
        print("娘子~啊哈")

    def dance(self):
        print("廣場舞跳起來...")

    def  lie(self):
        print("我家特別窮,我小時候就一直在放牛,只有幾萬頭....")

# 類例項化
stu = Student()
# 成員方法呼叫
stu.introduce('ldc',18,'跑步')
stu.singsong()
stu.dance()
stu.lie()
輸出:
大家好,我是ldc,今年18歲,愛好是跑步
娘子~啊哈
廣場舞跳起來...
我家特別窮,我小時候就一直在放牛,只有幾萬頭....

二十二、如何檢視所有屬性和方法

class Test():
    def __init__(self,name):
        self.name = name
    def test(self):
        print('testing...')

test = Test('測試')
# 檢視所有屬性和方法
list1 = dir(test)
# 檢查例項是否有這個屬性
print(hasattr(test, 'name'),hasattr(test, 'test'),hasattr(test, 'tt'))
# 設定屬性值
setattr(test,'name','測試2')
# 獲取屬性值
print(getattr(test, 'name'))
輸出:
True True False
測試2

相關文章