python的類和物件 類成員番外篇

2021-09-07 04:17:19 字數 3888 閱讀 1837

學完了物件導向的三大特性,已經get了所有屌絲技能的我們也當一回文藝小青年,來看看類的成員和成員修飾符。

今天『三』這個數字好親和~~~類成員可以分為三類:字段、方法和屬性

一、字段

首先我們來看看字段,先上圖:

我們看上面左側這張圖,第二個黃框框裡面的字段我們見過的,以前也一直是這麼用的,我們叫它普通字段,在使用的時候我們使用 物件名.欄位名 的方法就可以呼叫,那麼第乙個的黃框框裡的靜態欄位又是怎麼一回事呢?我們可以看出,它是乙個屬於類的變數,並不是只屬於乙個物件,而是屬於乙個類,那麼靜態欄位和普通欄位在實際意義上有什麼區別呢?我們來看旁邊的例子。中間的圖是我們呼叫左邊類中變數的**,右邊是執行結果,首先普通欄位的使用方式和以前一樣,而靜態字段,我們發現他有兩種呼叫方式:

一、物件名.欄位名 二、類名.欄位名。從上例中我們可以看出,使用 物件名.欄位名 的方法對字段的值進行修改,我們只是修改了該物件的字段內容,並不會影響其他物件及類變數本身,如果使用 類名.欄位名 的方式進行修改,則只是修改了該類的字段內容,其他物件不會受到影響。

我們從記憶體的角度來看這個問題,當我們使用類名.欄位名去呼叫靜態變數的時候,這個變數是存在類的記憶體中的,這個時候各個物件都可以取到類的記憶體中的變數,但是當我們使用物件名.欄位名去修改這個靜態變數的時候,我們其實是在物件的記憶體中又開闢了一塊空間去儲存這個欄位和修改後的值,所以乙個物件的字段發生改變,類和其他物件的該字段並不會發生變化。哎呦,總之解決這個問題的最終辦法就是始終用 類名.欄位名 去使用類中的靜態變數就對了!

#靜態字段

6 money = 10000

7def

__init__

(self,name,salary):89

#普通字段

10 self.name =name

11 self.salary =salary

1213

14 dad1 = father('

dad1

',6000)

15 dad2 = father('

dad2

',7000)

1617 dad1.salary += 1000

18 dad2.salary += 1000

19print

'dad1.salary:

',dad1.salary

20print

'dad1.salary:

',dad2.salary

21print'*

'*20

22 dad1.money += 1000

23 dad2.money += 1000

24print

'father.money :

',father.money

25print

'dad1.money :

',dad1.money

26print

'dad2.money :

',dad2.money

27print'*

'*20

28 father.money += 1000

29print

'father.money :

',father.money

30print

'dad1.money :

',dad1.money

31print

'dad2.money :

',dad2.money

example code

二、方法

方法包括:普通方法、靜態方法和類方法,三種方法在記憶體中都歸屬於類,區別在於定義和呼叫的方式不同。

我們看上面的兩張圖,實現的是同樣的功能,左圖是使用普通方法,右圖則使用了類方法和靜態方法,我們可以發現,這兩個方法中都沒有使用到物件本來的屬性,這個時候如果還需要再給類進行初始化然後再用 物件名.方法名 的方法去進行呼叫,就會顯得非常繁瑣了,這個時候我們就可以使用類變數和靜態變數來完成,只要加上@classmethod或@staticmethod修飾符,就可以將普通方法變成類方法或者靜態方法。需要注意的是:類方法至少有乙個引數,那就是這個類本身,用cls表示,不要問為什麼,背下來就好。。。而靜態方法不需要傳物件也不需要傳類引數,就像個普通的函式一樣用就對了!這兩個方法都是用 類名.方法名來呼叫,所以自然地也就可以使用 類變數,但是卻不能訪問物件的變數,原因***,因為他根本就沒有接收到物件引數,所以也就找不到物件中的內容啦~

三、屬性

如果你已經了解python類中的方法,那麼屬性就非常簡單了,因為python中的屬性其實是普通方法的變種。

哎,其實就是這樣,我們看一下當我們想檢視稅後工資的時候,這其實是乙個人的屬性,但是它卻要經過一些特殊的處理或者計算,讓我們必須寫在乙個方法裡,這個時候我們使用@property這個修飾符,就可以像使用字段一樣呼叫這個方法了。對,屬性是**座就是這麼矯情!!!當然如果你和我一樣是神經大條的射手座,完全不用care這個屬性什麼鬼的。

儘管如此,在這裡還是要說一說要注意一下幾點:

1.定義時,在普通方法的基礎上新增@property裝飾器;

2.定義時,屬性僅有乙個self引數

3.呼叫時,無需括號

未完。。。

參考:

1

#!/usr/bin/env python2#

-*-coding:utf-8-*-

3class

father(object):45

#靜態字段

6 money = 10000

7def

__init__

(self,name,salary):89

#普通字段

10 self.name =name

11 self.salary =salary

1213

@property

14def

net_pay(self):

15'''

屬性'''

16 netpay = self.salary - ((self.salary- 3500)*0.1)

17return

netpay

1819 dad1 = father('

dad1

',6000)

20print dad1.net_pay

@property code

python 類和物件成員的操作

獲取類和物件中所屬成員的資訊 類 類名.dict 物件 物件名.dict 類成員的操作 少用 成員屬性 和變數一樣 訪問 類名.成員屬性名 修改 類名.成員屬性名 新值 刪除 del 類名.成員屬性名 新增 類名.成員屬性名 值 成員方法 訪問 類名.方法名 引數 刪除 del 類名.方法名 不要加...

python類的成員 Python類成員

乙個是乙個類屬性,另乙個是乙個例項屬性。它們是不同的,但是它們之間的關係密切相關,使得它們在時間上看起來一樣。它與python查詢屬性的方式有關。有層次結構。在簡單的情況下,它可能如下所示 instance subclass superclass object built in type 當你在這樣...

python類 物件 屬性 方法 類的成員

類 具有同種屬性的物件稱為類,是個抽象的概念。比如說 汽車 人 狗 神 物件 日常生活中的所有東西都是物件,是類的例項化。比如說 推土車是汽車的例項化 姚明是人的例項化 小白 狗的名字 是狗的例項化 二郎神是神的例項化 屬性 用來描述具體某個物件的特徵的是屬性,是靜態的。比如 姚明身高2.6公尺多 ...