-
改了之后就無法通過類去訪問了,只能通過實(shí)例去訪問。
查看全部 -
Python 定義了__str()__和__repr__()兩種方法,__str()__用于顯示給用戶,而__repr__()用于顯示給開發(fā)人員,當(dāng)使用str()時(shí),實(shí)際調(diào)用的是__str__()方法,而直接輸入變量,調(diào)用的是__repr__()方法。
class?Person(object): ????def?__init__(self,?name,?gender): ????????self.name?=?name ????????self.gender?=?gender ????def?__str__(self): ????????return?'name:?{},?gender:?{}'.format(self.name,?self.gender) ????def?__repr__(self): ????????return?'name:?{},?gender:?{}'.format(self.name,?self.gender) bob?=?Person('Bob',?'Male') str(bob)?#?==>?'name:?Bob,?gender:?Male' >>>?bob 'name:?Bob,?gender:?Male'
查看全部 -
要獲取或者設(shè)置對(duì)象的屬性,就需要用 getattr() 和 setattr( )函數(shù)了。
查看全部 -
在一條繼承鏈上,一個(gè)實(shí)例可以看成它本身的類型,也可以看成它父類的類型。
isinstance也可以用于Python自有數(shù)據(jù)類型的判斷。
查看全部 -
通過函數(shù)isinstance()可以判斷一個(gè)變量的類型。
查看全部 -
私有屬性以雙下劃線__開頭,私有屬性只能在當(dāng)前函數(shù)中被調(diào)用,不能被外部的函數(shù)調(diào)用。
查看全部 -
不要通過實(shí)例來修改類屬性
查看全部 -
學(xué)了大半天,把__init__(self)寫成了__int__(self),運(yùn)行了大半天,始終報(bào)錯(cuò),唉~~~
查看全部 -
class Peple(object): pass
xiaoming = Peple()
xiaomai = Peple()
類,這是區(qū)別于其它的運(yùn)算符,如果沒有定義類的前提下,xiaoming == xiaomai ,這個(gè)等式是相等的;當(dāng)創(chuàng)建了類以后,我們進(jìn)行實(shí)例化后,xiaoming != xiaomai,這個(gè)等式就不成立了。這是類的最大區(qū)別;每創(chuàng)建一個(gè)實(shí)例,它們都?xì)w屬于這個(gè)類的不同實(shí)例,不相等;
查看全部 -
不能被外部訪問的屬性稱為私有屬性。私有屬性是以雙下劃線'__'開頭的屬性。 # 類私有屬性 class Animal(object): __localtion = 'Asia' print(Animal.__localtion) Traceback (most recent call last): File "", line 1, in AttributeError: type object 'Animal' has no attribute '__localtion'查看全部
-
定義類屬性可以直接在 class 中定義,比如在前面的Animal類中,加入地域的類屬性:
class?Animal(object): ????localtion?=?'Asia' ????def?__init__(self,?name,?age): ????????self.name?=?name ????????self.age?=?age
類屬性也是可以動(dòng)態(tài)添加和修改的,需要注意的是,因?yàn)轭悓傩灾挥幸环?,所以改變了,所有?shí)例可以訪問到的類屬性都會(huì)變更:
Animal.localtion?=?'Africa' print(cat.localtion)?#?==>Africa print(dog.localtion)?#?==>Africa
查看全部 -
[::-1] 表示將字符串倒過來查看全部
-
盡量不要通過實(shí)例來修改類屬性,否則很容易引發(fā)意想不到的錯(cuò)誤。查看全部
-
@log('DEBUG') def?my_func(): ????pass
把上面的定義翻譯成高階函數(shù)的調(diào)用,就是:
my_func?=?log('DEBUG')(my_func)
上面的語句看上去還是比較繞,再展開一下:
log_decorator?=?log('DEBUG') my_func?=?log_decorator(my_func)
上面的語句又相當(dāng)于:
log_decorator?=?log('DEBUG') @log_decorator def?my_func(): ????pass
查看全部 -
Python的 decorator 本質(zhì)上就是一個(gè)高階函數(shù),它接收一個(gè)函數(shù)作為參數(shù),然后,返回一個(gè)新函數(shù)。
使用 decorator 用Python提供的 @ 語法,這樣可以避免手動(dòng)編寫 f = decorate(f) 這樣的代碼。
考察一個(gè)@log的定義:def?log(f): ????def?fn(x): ????????print('call?'?+?f.__name__?+?'()...') ????????return?f(x) ????return?fn
對(duì)于階乘函數(shù),@log工作得很好:
@log def?factorial(n): ????return?reduce(lambda?x,y:?x*y,?range(1,?n+1)) print(factorial(10))
要讓 @log 自適應(yīng)任何參數(shù)定義的函數(shù),可以利用Python的?args 和 *kwargs,保證任意個(gè)數(shù)的參數(shù)總是能正常調(diào)用:
def?log(f): ????def?fn(*args,?**kwargs): ????????print('call?'?+?f.__name__?+?'()...') ????????return?f(*args,?**kwargs) ????return?fn
查看全部
舉報(bào)