__call__
方法和可調(diào)用對(duì)象
凡是可以將 () 直接應(yīng)用到自身并執(zhí)行, 都稱為可調(diào)用對(duì)象.
注意:
- 可調(diào)用對(duì)象包括自定義的函數(shù)、Python 內(nèi)置函數(shù)、以及本節(jié)所講的實(shí)例對(duì)象.
-
定義了
__call__()
的對(duì)象, 稱為“可調(diào)用對(duì)象”, 即該對(duì)象可以像函數(shù)一樣被調(diào)用. - 該方法使得實(shí)例對(duì)象可以像調(diào)用普通函數(shù)那樣, 以“對(duì)象名()”的形式使用
實(shí)操代碼
deff1():
print("f1")
f1()#本質(zhì)上也是調(diào)用了__call__()方法
classCar:
def__call__(self,age,money):
print("調(diào)用__call__()方法")
print("車齡:{0},金額:{1}".format(age,money))
f2=Car()
f2(3,289000)#像函數(shù)那樣調(diào)用,本質(zhì)上也是調(diào)用了__call__()
@property 裝飾器
@property
裝飾器相當(dāng)于在Java中實(shí)現(xiàn)了對(duì)屬性的get 方法
注意:
-
@property
可以將一個(gè)方法的調(diào)用方式變成“屬性調(diào)用”. -
@property
主要用于幫助我們處理屬性的讀操作、寫操作 -
對(duì)于某一個(gè)屬性, 我們可以直接通過:
emp1.salary = 30000
如上的操作讀操作、寫操作 但是這種做法不安全. 比如, 我需要限制薪水必須為 1-10000 的數(shù)字. 這時(shí)候我們就需要通過使用裝飾器@property
來處理.
實(shí)操代碼
classEmployee:
def__init__(self,name,salary):
self.name=name
self.__salary=salary
@property#相當(dāng)于salary屬性的getter方法
defsalary(self):
print("月薪為{0}, 年薪為{1}".format(self.__salary,12*self.__salary))
returnself.__salary
@salary.setter
defsalary(self,salary):#相當(dāng)于salary屬性的setter方法
if0
self.__salary=salary
else:
print("薪水錄入錯(cuò)誤!只能在0-1000000之間")
emp1=Employee("時(shí)間靜止",8848.48)
print(emp1.salary)
emp1.salary=12580
print(emp1.salary)
關(guān)于None和判斷的總結(jié)
None是什么
- 與C和JAVA不同, python中是沒有 NULL 的, 取而代之的是 None . None 是一個(gè)特殊的常量, 表示變量沒有指向任何對(duì)象.
- 在Python中, None 本身實(shí)際上也是對(duì)象, 有自己的類型 NoneType .
- 你可以將 None 賦值給任何變量, 但我們不能創(chuàng)建 NoneType 類型的對(duì)象
實(shí)操代碼
obj=None
obj2=None
print(type(None))
print(id(None))
print(id(obj))
print(id(obj2))
"""輸出結(jié)果
'nonetype'>
140706372487160
140706372487160
140706372487160
"""
None和其他類型的比較
- None不是False, None不是0, None不是空字符串. None和任何其他的數(shù)據(jù)類型比較永遠(yuǎn)返回False
- if語句判斷時(shí),空列表[]、空字典{}、空元組()、0等一系列代表空和無的對(duì)象會(huì)被轉(zhuǎn)換成False
- == 和 is 判斷時(shí), 空列表、空字符串不會(huì)自動(dòng)轉(zhuǎn)成 False
實(shí)操代碼
#None不是False,None不是0,None不是空字符串.None和任何其他的數(shù)據(jù)類型比較永遠(yuǎn)返回False.
a=None
ifaisNoneanda==None:
print("a是None")#會(huì)執(zhí)行
ifa==Falseora==0:
print("None不等于False")#不會(huì)被打印
a=[]
b=()
c={}
d=""
e=0
f=None
#if語句判斷時(shí),空列表[]、空字典{}、空元組()、0等一系列代表空和無的對(duì)象會(huì)被轉(zhuǎn)換成False
if(nota)and(notb)and(notc)and(notd)and(note)and(notf):
print("if判斷時(shí),空列表[]、空字符串、0、None等代表空和無的對(duì)象會(huì)被轉(zhuǎn)換成False")
#==和is判斷時(shí),空列表、空字符串不會(huì)自動(dòng)轉(zhuǎn)成False
ifa==Falseord==False:
print("==時(shí), 空列表、空字符串不是False!")#不會(huì)執(zhí)行
if(e==False):
print("==時(shí),0會(huì)轉(zhuǎn)成False")
-
代碼
+關(guān)注
關(guān)注
30文章
4790瀏覽量
68654 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論