Pytho物件導向的成員組成部分

2021-09-17 02:42:28 字數 3637 閱讀 7595

類成員可以分為三類:字段、方法、屬性

字段包含普通欄位和靜態字段,在定義是有區別,本質的區別在於他們記憶體中儲存的位置不同

class testobj:

# 靜態字段

my_class = '五(三)班'

def __init__(self, name):

self.name = name

# 直接通過類訪問靜態字段

testobj.my_class

# 訪問普通字段

obj = testobj('李四')

obj.my_class

普通欄位和靜態欄位的歸屬是不一樣的

應用場景:如果累建立物件時,沒個物件都有相同的字段,可以使用靜態字段

普通方法:

有物件呼叫,至少乙個self引數,執行普通方法時,自動將呼叫該方法的物件值賦值給self

靜態方法:

由類呼叫,無缺省引數

類方法:

由類呼叫,至少乙個cls引數,執行該類方法時,自動將呼叫該方法的賦值給cls

class testobj:

def __init__(self, name)

self.name = name

def get_name():

print("this is ordinaly_funtion")

@classmethod

def class_function(cls):

print("this is class_function")

@staticmethod

def static_function():

print('this is static_function')

# 呼叫普通方法

p = testobj()

p.get_name()

# 呼叫類方法

testobj.class_function()

# 呼叫靜態方法

testobj.static_function()

類的方法在記憶體中只會存乙份。不同的是它們在呼叫的時候,由於呼叫的物件不同,自動傳入的引數也就有所不同
class testobj:

def __init__(self, name):

self.name = name

def get_name(self):

return self.name

@property

def name()

return self.name

##########

p = testobj()

p.get_name() # 普通方法呼叫

p.name # 屬性呼叫

屬性的呼叫需要注意以下幾點:

1、 定義時,需要在普通方法上新增乙個**@property裝飾器

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

3、 呼叫時,無需括號

屬性存在的意義是:訪問屬性可以製造出和訪問字段一樣簡單的假象,屬性是由方法變種而來,如果沒有屬性,方法可以完全替代

屬性的功能是:可以在屬性內部進行一系列邏輯運算,將結果返回

(1)裝飾器:直接在方法上新增**@property**裝飾器

其中裝飾器在新式類和經典類中的用法又有差別(繼承object基類的為新式類)

# 經典類

class testobj:

@property

def name(self):

return name

########

p = testobj()

p.name

# 經典類中使用裝飾器只有這一種寫法

# 新式類

class testobj(object):

def __init__(self, name):

self.name = name

@property

def name(self):

return name

@name.setter

def name(self, name):

self.name = name

@name.deleter

def name(self):

self.name = none

############

p = testobj('李四')

p.name # 自動執行被 @property 修飾的name方法

p.name = '王五' # 自動執行被 @name.setter 修飾的方法,並將值賦給方法的引數

del p.name # 自動執行被 @name.deletter 修飾的方法

可以根據新式類的特點 來進行查詢、修改、刪除操作

(2)靜態字段:在類中使用property建構函式建立類的靜態字段

property構造方法中有四個引數

1、第乙個引數是方法名,呼叫 物件.屬性 時自動觸發

2、第二個引數是方法名,呼叫 物件.屬性 = *** 時自動觸發

3、第三個引數是方法名,呼叫 del 物件.屬性 是自動觸發

4、第四個引數是字串,呼叫物件.屬性.doc,此引數是該屬性的描述資訊

class testobj:

def __init__(self, name):

self.name = name

def get_name(self):

return self.name

# 必須兩個引數

def set_name(self, name):

self.name = name

def del_name(self):

self.name = none

name = property(get_name, set_name, del_name, 'description')

p = testobj('老王')

p.name #呼叫property中第乙個引數的方法

p.name = '老李'

del p.name

在日常工作中,使用裝飾器定義屬性的使用面更廣一些,但是讀一些原始碼是,使用建構函式的方式也不少見

物件導向 成員變數

變數可以分為三大類 成員變數 區域性變數和全域性變數。成員變數指的是在類介面部分或類實現部分定義的變數。objective c的成員變數都是例項變數,objective c並不支援真正的類變數。只要例項存在,程式就可以訪問該例項的例項變數,在程式中訪問例項變數使用如下語法 例項 例項變數雖然obje...

Python 物件導向成員

python 物件導向成員 所有物件導向成員 6個 變數 2 例項變數 類變數方法 3 例項方法 類方法靜態方法 屬性 1 屬性 變數 類中的函式 例項變數 字段 寫在 init 中的變數,例項化乙個物件時就設定的變數 應用場景 當類中多個方法使用共同的某個值時,這時可以將該值封裝成例項變數,方便呼...

Python物件導向之物件成員

任務 請修改右側 begin end 之間的 使其可以正常執行。該 的目的是求輸入資料的階乘。請在下面的begin end之間按照注釋中給出的提示編寫正確的 begin class factorial def init self,num self.num num defget value self ...