一、可呼叫物件
在類中定義__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物件的屬性是:在類中定義__slots__物件,該物件會自動替換__dict__物件,轉變為不可變物件。在__slots__中設定屬性名後,就只能使用__slots__中包含的屬性名,否則就會觸發異常。man物件的屬性是:
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中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...