-
創(chuàng)建類:
class Animal():pass
dog = Animal()
cat = Animal()print(dog)
print(cat)
print(dog == cat)pass用于占位
<__main__.Animal instance at 0x7f12ce9a0050>
dog 是類動(dòng)物(__main__.Animal)的實(shí)例(object)存放在地址(at 0x7f12ce9a0050)
查看全部 -
多態(tài)方法實(shí)際調(diào)用的時(shí)候,會(huì)首先查找自身的定義,如果自身有定義,則優(yōu)先使用自己定義的函數(shù);如果沒(méi)有定義,則順著繼承鏈向上找
查看全部 -
1. class Student()定義的時(shí)候,需要在括號(hào)內(nèi)寫明繼承的類Person
2. 在__init__()方法,需要調(diào)用super(Student, self).__init__(name, gender),來(lái)初始化從父類繼承過(guò)來(lái)的屬性
查看全部 -
初始化實(shí)例時(shí),如果調(diào)用類的屬性,必須用類名.屬性
查看全部 -
多態(tài)
從定義上來(lái)講,Student和Teacher都擁有來(lái)自父類Person繼承的who()方法,以及自己定義的who()方法。但是在實(shí)際調(diào)用的時(shí)候,會(huì)首先查找自身的定義,如果自身有定義,則優(yōu)先使用自己定義的函數(shù);如果沒(méi)有定義,則順著繼承鏈向上找
多重繼承
在多重繼承里,A雖然被繼承了兩次,但是__init__()的方法只調(diào)用一次。
多重繼承的目的是從兩種繼承樹(shù)中分別選擇并繼承出子類,以便組合功能使用。
查看全部 -
這說(shuō)明在一條繼承鏈上,一個(gè)實(shí)例可以看成它本身的類型,也可以看成它父類的類型。
isinstance也可以用于Python自有數(shù)據(jù)類型的判斷。
通過(guò)函數(shù)isinstance()可以判斷一個(gè)變量的類型。
查看全部 -
class Student()定義的時(shí)候,需要在括號(hào)內(nèi)寫明繼承的類Person
在__init__()方法,需要調(diào)用super(Student, self).__init__(name, gender),來(lái)初始化從父類繼承過(guò)來(lái)的屬性
查看全部 -
is才是繼承關(guān)系
查看全部 -
python定義類方法
類方法和實(shí)例方法是不同的
類方法需要使用@classmethod來(lái)標(biāo)記為類方法,否則定義的還是實(shí)例方法
類方法的第一個(gè)參數(shù)將傳入類本身,通常將參數(shù)名命名為 cls,上面的 cls.__localtion 實(shí)際上相當(dāng)于Animal.__localtion。
因?yàn)槭窃陬惿险{(diào)用,而非實(shí)例上調(diào)用,因此類方法無(wú)法獲得任何實(shí)例變量,只能獲得類的引用。
查看全部 -
注意,在外部調(diào)用實(shí)例方法時(shí),是不需要顯式傳遞self參數(shù)的。
另外,通過(guò)定義實(shí)例方法來(lái)操作私有屬性的這種方法是推薦的,這種數(shù)據(jù)封裝的形式除了能保護(hù)內(nèi)部數(shù)據(jù)一致性外,還可以簡(jiǎn)化外部調(diào)用的難度。
當(dāng)然,實(shí)例方法并不僅僅是為私有屬性服務(wù)的,我們可以把和類的實(shí)例有關(guān)的操作都抽象成實(shí)例方法,比如:打印實(shí)例的詳細(xì)信息等等。在上面的定義,name是實(shí)例的私有屬性,從外部是無(wú)法訪問(wèn)的,而get_name(self) 就是一個(gè)實(shí)例方法,在實(shí)例方法里面是可以操作私有屬性的,注意,它的第一個(gè)參數(shù)是self。
另外,__init__(self, name)其實(shí)也可看做是一個(gè)特殊的實(shí)例方法。
通過(guò)定義get_name(self)方法,在外部就可以通過(guò)這個(gè)方法訪問(wèn)私有屬性了
查看全部 -
并不是所有的屬性都可以被外部訪問(wèn)的,這種不能被外部訪問(wèn)的屬性稱為私有屬性。私有屬性是以雙下劃線'__'開(kāi)頭的屬性
在外部訪問(wèn)私有屬性將會(huì)拋出異常,提示沒(méi)有這個(gè)屬性。
雖然私有屬性無(wú)法從外部訪問(wèn),但是,從類的內(nèi)部是可以訪問(wèn)的。私有屬性是為了保護(hù)類或?qū)嵗龑傩圆槐煌獠课廴径O(shè)計(jì)的
查看全部 -
在類屬性和實(shí)例屬性同時(shí)存在的情況下,實(shí)例屬性的優(yōu)先級(jí)是要高于類屬性的,在操作實(shí)例的時(shí)候,優(yōu)先是操作實(shí)例的屬性。
另外,當(dāng)實(shí)例沒(méi)有和類同名的時(shí)候,通過(guò)實(shí)例對(duì)象,依然可以訪問(wèn)到類屬性。因此,需要特別注意,盡量不要通過(guò)實(shí)例來(lái)修改類屬性,否則很容易引發(fā)意想不到的錯(cuò)誤。
把count改為私有__count,這樣實(shí)例變量在外部無(wú)法修改__count
查看全部 -
在定義 Person 類時(shí),可以為Person類添加一個(gè)特殊的__init__()方法,當(dāng)創(chuàng)建實(shí)例時(shí),__init__()方法被自動(dòng)調(diào)用,我們就能在此為每個(gè)實(shí)例都統(tǒng)一加上以下屬性:
查看全部 -
type()獲取變量的類型
dir()獲取變量的所有屬性,返回的是字符串列表
getattr()獲取對(duì)象的屬性
setattr()設(shè)置新的對(duì)象屬性
查看全部 -
私有屬性是以雙下劃線開(kāi)頭的屬性
查看全部
舉報(bào)