Python可呼叫物件和不可變物件

2021-10-07 10:28:28 字數 2046 閱讀 3452

一、可呼叫物件

在類中定義__call__魔術方法,由此建立的物件就可以像函式那樣進行呼叫了

class people:

def __call__(self, food):

print("他在吃".format(food))

man = people()

man("蘋果")

他在吃蘋果

一般情況下,呼叫一次函式後便會被銷毀,並不會記錄上一次呼叫的結果,這是無狀態的。可以給呼叫物件增加記憶功能,使其成為有狀態的函式,修改people類。

class people:

def __init__(self):

self.food =

def __call__(self, food):

print("他在吃".format(food))

def __str__(self):

return str.join("-->",self.food)

man = people()

man("蘋果")

man("餅乾")

man("牛奶")

man("雞蛋")

print("他吃東西的順序是:",str(man))

他在吃蘋果

他在吃餅乾

他在吃牛奶

他在吃雞蛋

他吃東西的順序是: 蘋果-->餅乾-->牛奶-->雞蛋

二、不可變物件

我們知道元組是不可變物件,不可變物件常用於執行緒同步,使用__slots__魔術方法可以建立不可變物件。

可變物件:使用__dict__屬性檢視當前例項的屬性和屬性值

class people:

def __init__(self):

self.food =

self.hobby = "籃球"

self.age = "22歲"

def __call__(self, food):

print("他在吃".format(food))

def __str__(self):

return str.join("-->",self.food)

man = people()

man.name = "小王"

print("man物件的屬性是:",man.__dict__)

del man.name

print("man物件的屬性是:",man.__dict__)

man物件的屬性是:

man物件的屬性是:

在類中定義__slots__物件,該物件會自動替換__dict__物件,轉變為不可變物件。在__slots__中設定屬性名後,就只能使用__slots__中包含的屬性名,否則就會觸發異常。

class people:

__slots__ = ["food","hobby","age"]

def __init__(self):

self.food =

self.hobby = "籃球"

self.age = "22歲"

def __call__(self, food):

print("他在吃".format(food))

def __str__(self):

return str.join("-->",self.food)

man = people()

print("man物件的屬性是:",man.__slots__)

man.name = "小王"

man物件的屬性是: ['food', 'hobby', 'age']

attributeerror: 'people' object has no attribute 'name'

python 可變物件和不可變物件

變數沒有型別,那麼就意味著它可以隨意指向任何物件。python中的變數相當於乙個指標。當將乙個變數a賦值給另乙個變數b時,無論變數a指向的是可變物件還是不可變物件,變數b指向變數a指向的物件。例 alist 1 2,3 anolist alist id alist id anolist true b...

Python可變物件和不可變物件

python中一切皆物件,每個物件都有其唯一的id,對應的型別和值,其中id指的是物件在記憶體中的位置。根據物件的值是否可修改分為可變物件和不可變物件。其中,不可物件包括 數字,字串,tuple,frozenset 不可變集合 可變物件包括 list,dict,set python中的變數可以指向任...

Python 可變物件和不可變物件

python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。一 不可變物件 由於python中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...