1. 程式人生 > >面向物件二 成員

面向物件二 成員

本節主要內容:

1. 類的成員

2. 類的成員-變量

3. 類的成員-方法

4. 類的成員-屬性

5. 私有

一. 類的成員:

首先, 什麼是類的成員. 很簡單. 你能在類中寫什麼?  寫的內容就是成員. 到目前為止. 我們 已經學過了一些成員了.

class 類名:   

# 方法    def __init__(self, 引數1, 引數2....):      

  # 屬性變數量       

self.屬性1 = 引數1       

self.屬性2 = 引數2        ....    # 方法   

def method(self):       

pass

在上⾯面程式碼中__init__和method都屬於類的成員⽅方法.  又稱為例項方法.  總之這樣的東西 需要用物件來訪問.  而上方的self.屬性1 = 引數1 這個程式碼的含義是給物件設定屬性資訊. 含 義是這個物件的xxx屬性是xxxx. 這種東西又被稱之為成員變數或者例項變數量, 再或者被稱之 為欄位. 都是⼀個意思.

二. 類的成員-變數

1. 例項變量(欄位)

2. 類變量(靜態變數)

class Person:    # 類變數量, 表示所有的該類的物件都共享這個變數量.   

country = "中國"      

def __init__(self, name, num, birthday):        # 例項例變數量(欄位) 表示你建立的每⼀一個⼈人都有這三個變數量       

self.name = name       

self.num = num       

self.birthday = birthday

p1 = Person("alex", 18, "1840年年06⽉月01⽇日")

print(p1.name)        # alex print(p1.country)     #中國
p2 = Person("wusir", 28, "1894年年07⽉月25⽇日")

print(p2.name)        # wusir print(p2.country)     # 中國

我們發現物件p1和p2的name都是物件⾃自⼰己的. 但是country是類的. ⼤大家公⽤用同⼀一個變數量. 如何來驗證呢?

Person.country = "⼤大清" # 在這⾥裡里. 我把國家改成了了⼤大清

p1 = Person("alex", 18, "1840年年06⽉月01⽇日")

print(p1.name)

print(p1.country)    # alex是⼤大清的
p2 = Person("wusir", 28, "1894年年07⽉月25⽇日")

print(p2.name)

print(p2.country)    # wusir也是大清的

例項變數,  給物件用的.     類變數,  多個物件共享的. 最好是用類名來訪問. 這樣更加規範.

二. 類的成員-方法

class Computer:        # 例項方法(成員⽅方法)   

def play(self):       

print("我的電腦可以玩兒")

c = Computer()

c.play()    # 物件直接去呼叫例項方法

 靜態方法. 靜態方法不需要我們給方法傳遞self.  也就是說. 當出現⼀個方法不需要使用到 成員變數量的時候. 就可以選擇使⽤用靜態方法.  靜態方法需要我們在⽅方法上⾯面新增⼀一 個@staticmethod

類⽅方法. 類⽅方法和靜態⽅方法差不多, 只不過類⽅方法需要在引數列列表中的第⼀一個位置預留留⼀一 個位置, 通常我們給第⼀一個引數起名字叫cls. 類⽅方法在被調⽤用的時候也不需要傳遞例項例物件. 但是. 系統會⾃自動的把類傳遞給第⼀一個引數.  類⽅方法在編寫的時候, 需要在類⽅方法上⾯面添 加@classmethod

三. 類的成員-屬性

 屬性其實就是通過方法改造過來的⼀一種變數量的寫法, 在⽅方法上新增⼀一個@property就可以 了

class Person:   

def __init__(self):       

pass   

@property   

def age(self):       

return 1  

p = Person()

age = p.age

print(age)

 應⽤用場景: 我們⼀一般儲存資料的時候, 不會儲存⼀一個⼈人的年年齡. 因為隨著時間的推移. 每個 ⼈人的年年齡都時刻在改變著. 那如何儲存更更加完美呢? 很簡單. 儲存出⽣生年年⽉月⽇日. 然後⽤用程式來 計算,你當前的年年齡. 實時的. 那這個時候就需要進⾏行行相應的計算了了. ⽽而計算屬於⼀一個功能. 當 然要寫⽅方法⾥裡里了了. 但是對於年年齡這個屬性⽽而⾔言. 他應該是⼀一個數值. ⽽而不是動作. 所以python 就提供了了這樣⼀一種機制. 通過⽅方法來描述⼀一個屬性.    

注意:         1. 方法引數只能有⼀一個self       

2. 方法上⽅方要寫@property       

3. 呼叫的時候, 我們不需要寫括號. 直接當成屬性變數來⽤用就可以了了.        

4. 這種套路路只能取值. 不能設定值

 

四. 私有

 在python中, ⼀一般是不提倡設定和使⽤用私有資訊的. 但有些場景, 我們不得不這麼做. 比如, 在⼀一個公司. 每個⼈人的收入情況, 這種內容是絕對不能公開的. 還有, 你的老婆, 也是⼀一個私有 的. 只能你⼀一個⼈人使⽤用. 別⼈人不能碰. 碰了了就炸鍋了了.    

在python中使⽤用__作為⽅方法或者變數量的字首. 那麼這個⽅方法或者變數量就是⼀一個私有的.

1. 私有變量2. 私有方法

需要注意的是, 對於私有的內容⽽言. 子類是無法繼承的.