-
改了之后就無法通過類去訪問了,只能通過實例去訪問。
查看全部 -
Python 定義了__str()__和__repr__()兩種方法,__str()__用于顯示給用戶,而__repr__()用于顯示給開發人員,當使用str()時,實際調用的是__str__()方法,而直接輸入變量,調用的是__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'
查看全部 -
要獲取或者設置對象的屬性,就需要用 getattr() 和 setattr( )函數了。
查看全部 -
在一條繼承鏈上,一個實例可以看成它本身的類型,也可以看成它父類的類型。
isinstance也可以用于Python自有數據類型的判斷。
查看全部 -
通過函數isinstance()可以判斷一個變量的類型。
查看全部 -
私有屬性以雙下劃線__開頭,私有屬性只能在當前函數中被調用,不能被外部的函數調用。
查看全部 -
不要通過實例來修改類屬性
查看全部 -
學了大半天,把__init__(self)寫成了__int__(self),運行了大半天,始終報錯,唉~~~
查看全部 -
class Peple(object): pass
xiaoming = Peple()
xiaomai = Peple()
類,這是區別于其它的運算符,如果沒有定義類的前提下,xiaoming == xiaomai ,這個等式是相等的;當創建了類以后,我們進行實例化后,xiaoming != xiaomai,這個等式就不成立了。這是類的最大區別;每創建一個實例,它們都歸屬于這個類的不同實例,不相等;
查看全部 -
不能被外部訪問的屬性稱為私有屬性。私有屬性是以雙下劃線'__'開頭的屬性。 # 類私有屬性 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
類屬性也是可以動態添加和修改的,需要注意的是,因為類屬性只有一份,所以改變了,所有實例可以訪問到的類屬性都會變更:
Animal.localtion?=?'Africa' print(cat.localtion)?#?==>Africa print(dog.localtion)?#?==>Africa
查看全部 -
[::-1] 表示將字符串倒過來查看全部
-
盡量不要通過實例來修改類屬性,否則很容易引發意想不到的錯誤。查看全部
-
@log('DEBUG') def?my_func(): ????pass
把上面的定義翻譯成高階函數的調用,就是:
my_func?=?log('DEBUG')(my_func)
上面的語句看上去還是比較繞,再展開一下:
log_decorator?=?log('DEBUG') my_func?=?log_decorator(my_func)
上面的語句又相當于:
log_decorator?=?log('DEBUG') @log_decorator def?my_func(): ????pass
查看全部 -
Python的 decorator 本質上就是一個高階函數,它接收一個函數作為參數,然后,返回一個新函數。
使用 decorator 用Python提供的 @ 語法,這樣可以避免手動編寫 f = decorate(f) 這樣的代碼。
考察一個@log的定義:def?log(f): ????def?fn(x): ????????print('call?'?+?f.__name__?+?'()...') ????????return?f(x) ????return?fn
對于階乘函數,@log工作得很好:
@log def?factorial(n): ????return?reduce(lambda?x,y:?x*y,?range(1,?n+1)) print(factorial(10))
要讓 @log 自適應任何參數定義的函數,可以利用Python的?args 和 *kwargs,保證任意個數的參數總是能正常調用:
def?log(f): ????def?fn(*args,?**kwargs): ????????print('call?'?+?f.__name__?+?'()...') ????????return?f(*args,?**kwargs) ????return?fn
查看全部
舉報