-
多態(tài)
在實(shí)際調(diào)用的時(shí)候,會(huì)首先查找自身的定義,如果自身有定義,則優(yōu)先使用自己定義的函數(shù);如果沒有定義,則順著繼承鏈向上找。
多重繼承
Python允許從多個(gè)父類繼承。多重繼承和單繼承沒有特別大的差異,只是在括號(hào)內(nèi)加入多個(gè)需要繼承的類的名字即可。
查看全部 -
函數(shù)isinstance()可以判斷一個(gè)變量的類型。
在繼承鏈上,一個(gè)父類的實(shí)例不能是子類類型,因?yàn)樽宇惐雀割惗嗔艘恍傩院头椒ā?/p>
在一條繼承鏈上,一個(gè)實(shí)例可以看成它本身的類型,也可以看成它父類的類型。
查看全部 -
class Student(Person):
? ?def __init__(self, name, gender, score):
? ? ? ?super(Student, self).__init__(name, gender)
? ? ? ?self.score = score
student = Student('Alice', 'girl', 100)
print(student.name) # ==> Alice
print(student.gender) # ==> girl
print(student.score) # ==> 100class Student()定義的時(shí)候,需要在括號(hào)內(nèi)寫明繼承的類Person;
在__init__()方法,需要調(diào)用super(Student, self).__init__(name, gender),來(lái)初始化從父類繼承過來(lái)的屬性;
查看全部 -
為了操作實(shí)例對(duì)象的私有屬性,定義了實(shí)例方法。
操作類的私有屬性,則應(yīng)該定義類的方法。
class Animal(object):
? ?__localtion = 'Asia'
? ?def __init__(self, name, age):
? ? ? ?self.name = name
? ? ? ?self.age = age
? ?@classmethod
? ?def set_localtion(cls, localtion):
? ? ? ?cls.__localtion = localtion
? ?@classmethod
? ?def get_localtion(cls):
? ? ? ?return cls.__localtion
print(Animal.get_localtion()) # ==> Asia
Animal.set_localtion('Afica')
print(Animal.get_localtion()) # ==> Africa類方法需要使用@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í)例變量,只能獲得類的引用。
查看全部 -
需要在外部訪問私有屬性時(shí):
定義實(shí)例方法
實(shí)例的方法指的就是在類中定義的函數(shù),實(shí)例方法的第一個(gè)參數(shù)永遠(yuǎn)都是self,self是一個(gè)引用,指向調(diào)用該方法的實(shí)例對(duì)象本身,除此以外,其他參數(shù)和普通函數(shù)是完全一樣的。
class Person(object):
? ? ?? def __init__(self, name):
? ? ? ??????? self.__name = name
? ? ?? def get_name(self):
? ? ? ??????? return self.__namep = Person('Alice')
print(p.get_name()) # ==> Alice在外部調(diào)用實(shí)例方法時(shí),是不需要顯式傳遞self參數(shù)的。
可以把和類的實(shí)例有關(guān)的操作都抽象成實(shí)例方法。
查看全部 -
私有屬性是以雙下劃線'__'開頭的屬性。
不能被外部訪問的屬性稱為私有屬性。
查看全部 -
私有屬性是以雙下劃線'__'開頭的屬性。
不能被外部訪問的屬性稱為私有屬性。
在外部訪問私有屬性將會(huì)拋出異常,提示沒有這個(gè)屬性。
雖然私有屬性無(wú)法從外部訪問,但是,從類的內(nèi)部是可以訪問的。私有屬性是為了保護(hù)類或?qū)嵗龑傩圆槐煌獠课廴径O(shè)計(jì)的。
查看全部 -
在類屬性和實(shí)例屬性同時(shí)存在的情況下,實(shí)例屬性的優(yōu)先級(jí)是要高于類屬性的,在操作實(shí)例的時(shí)候,優(yōu)先是操作實(shí)例屬性。
當(dāng)實(shí)例沒有和類同名的時(shí)候,通過實(shí)例對(duì)象,依然可以訪問到類屬性。
通過實(shí)例是無(wú)法修改類的屬性的,事實(shí)上,通過實(shí)例方法修改類屬性,只是給實(shí)例綁定了一個(gè)對(duì)應(yīng)的實(shí)例屬性。
查看全部 -
seek()方法,可以移動(dòng)文件的游標(biāo)位置,它接受一個(gè)參數(shù),表示文件的位置,0:文件首部,1:當(dāng)前位置,2:文件尾部,通過seek()可以把文件游標(biāo)移動(dòng)到文件首部但不刪除文件的內(nèi)容。
f =
?open('test.txt',?'a+') content?=?f.readlines
()
print(content) # ==> []
f.seek(0)
content = f.readlines()
print(content) # ==> ['Hello World\n', 'Hello Python\n', 'Hello Imooc\n']查看全部 -
class Animal(object):
? ?count = 0
? ?def __init__(self, name, age):
? ? ? ?self.name = name
? ? ? ?self.age = age
? ? ? ?Animal.count += 1
dog = Animal('wangwang', 1)
print(Animal.count)
cat = Animal('mimi', 3)
print(Animal.count)
pig = Animal('panpan', 1)
print(Animal.count)
查看全部 -
類屬性
class Animal(object):
? ?location = 'Asia'
? ?def __init__(self, name, age):
? ? ? ?self.name = name
? ? ? ?self.age = age
location就是屬于Animal這個(gè)類的類屬性。通過Animal()實(shí)例化的所有對(duì)象,都可以訪問到location,并且得到唯一的結(jié)果。
dog = Animal('wangwang', 1)
cat = Animal('mimi', 3)
print(dog.location) # ==> Asia
print(cat.location) # ==> Asia
# 類屬性,也可以通過類名直接訪問
print(Animal.location) # ==> Asia類屬性也是可以動(dòng)態(tài)添加和修改的,需要注意的是,因?yàn)轭悓傩灾挥幸环?,所以改變了,所有?shí)例可以訪問到的類屬性都會(huì)變更:
Animal.location = 'Africa'
print(cat.location) # ==>Africa
print(dog.location) # ==>Africa
查看全部 -
class Person(object):
? ??? def __init__(self, name, sex, age):
? ? ? ??????? self.name = name
? ? ? ??????? self.sex = sex
? ? ? ??????? self.age = age__init__() 方法的第一個(gè)參數(shù)必須是 self,后續(xù)參數(shù)則可以自由指定,和定義函數(shù)沒有任何區(qū)別。
定義類后,就可以相應(yīng)的實(shí)例化對(duì)象了,需要注意的是,在實(shí)例化的時(shí)候,需要提供除self以外的所有參數(shù)。
查看全部 -
賦予實(shí)例這些屬性
xiaohong.name = 'xiaohong'
xiaohong.sex = 'girl'
xiaohong.age = 13
print(xiaohong.name)
print(xiaohong.sex)
print(xiaohong.age)這些屬性也可以和普通變量一樣進(jìn)行運(yùn)算
比如xiaohong長(zhǎng)大了一歲:xiaohong.age = xiaohong.age + 1
查看全部 -
在Python中,通過class關(guān)鍵字定義一個(gè)類,按照 Python 的編程習(xí)慣,類名以大寫字母開頭。
class Person: ?pass
class Person(): pass
class Person(object): ?pass定義了類之后,就可以對(duì)類進(jìn)行實(shí)例化了,實(shí)例化是指,把抽象的類,賦予實(shí)物的過程。創(chuàng)建實(shí)例使用類名+()。
class Person(object): ?pass
xiaohong = Person()
xiaoming = Person()
查看全部
舉報(bào)