一、重寫
1. 完全重寫
- 重新實(shí)現(xiàn)從父類繼承下來(lái)的方法,重寫后醉拓,子類再調(diào)用這個(gè)方法的時(shí)候伟姐,就調(diào)用子類的
2. 保留加創(chuàng)新
- 保留父類實(shí)現(xiàn)的功能,再添加新的功能
3. 對(duì)象和類調(diào)用方法的過(guò)程
- 看當(dāng)前類是否存在這個(gè)方法
- 再看父類有沒(méi)有這個(gè)方法
- 再看父類的父類有沒(méi)有這個(gè)方法
- 直到找到基類(object)
綜合舉例:
class Animal(object):
"""動(dòng)物類"""
def __init__(self):
self.age = 0
self.color = ''
def eat(self):
print('吃東西')
def shout(self):
print('叫喚')
@classmethod
def get_number(cls):
return 100
class Dog(Animal):
"""狗類"""
def look_after(self):
print('看家')
# 重寫父類的shout
def shout(self):
print('汪汪汪~')
# 重寫父類eat方法
def eat(self):
# 保留父類eat的功能
super().eat()
print('吃骨頭')
@classmethod
def get_number(cls):
# 保留父類的類方法的功能的時(shí)候亿卤,還是super().類方法
print(super().get_number())
if __name__ == '__main__':
dog = Dog()
dog.age = 3
print(dog.color)
dog.shout()
dog.look_after()
dog.eat()
an = Animal()
# 繼承后愤兵,父類不能使用在子類中添加的屬性和方法
# an.look_after()
an.eat()
Dog.get_number()
二、添加屬性
1. 給當(dāng)前類添加對(duì)象屬性
- 重寫 init 方法
- 注意:如果要保留父類的對(duì)象屬性排吴,主要使用super()去調(diào)用父類的init方法
2. 多態(tài)
多態(tài)
同一個(gè)失誤有多種形態(tài)
- 方法的多態(tài):子類繼承父類的方法秆乳,可以對(duì)方法進(jìn)行重寫,一個(gè)方法就有多種形態(tài)(多態(tài)的表現(xiàn))
- 類的多態(tài):繼承產(chǎn)生多態(tài)
-
綜合舉例
class Person(object):
"""人類"""
def __init__(self, name, age=0, sex=''):
self.name = name
self.age = age
self.sex = sex
def eat(self):
print('人在吃飯')
class Staff(Person):
# init方法的參數(shù):保證在創(chuàng)建對(duì)象的時(shí)候就可以給某些屬性賦值
def __init__(self, name='', age=0, salary=0):
super().__init__(name, age)
self.salary = salary
def eat(self):
print('員工在吃飯')
class Scientist(Person):
def eat(self):
print('科學(xué)家在吃飯')
if __name__ == '__main__':
p1 = Person('李四',sex='女')
p1.eat()
s1 = Staff(age=18)
s1.sex = '男'
print(s1.name)
s1.salary = 10000
print(s1.salary)
s1.eat()
# 練習(xí):
"""
聲明人類钻哩,有屬性屹堰,名字、年齡街氢、性別扯键、身高
要求創(chuàng)建人的對(duì)象的時(shí)候可以給名字、性別珊肃、年齡賦初值
再創(chuàng)建學(xué)生類繼承自人類荣刑,擁有人類的所有的屬性,再添加學(xué)號(hào)伦乔、成績(jī)厉亏、電話屬性
要求創(chuàng)建學(xué)生對(duì)象的時(shí)候可以給名字、年齡和電話賦初值
"""
class Person2:
"""人類"""
a = 10
def __init__(self, 烈和,, sex, age):
self.name = name
self.age = age
self.sex = sex
self.height = 0
class Student(Person2):
"""學(xué)生類"""
b = 100
def __init__(self, name='', age=0, tel='00'):
super().__init__(name, age=age, sex='女')
self.study_id = '00'
self.score = 0
self.tel = tel
stu = Student('李四')
stu.sex = '男'
print(stu.age)
p1 = Person2('張三', '男', 18)
3. 重載
-
一個(gè)類中可以有多個(gè)名字相同的方法爱只,但是參數(shù)不一樣,就叫重載招刹。但是python中不支持恬试。
三、python中的內(nèi)存管理
-
棧
棧中的內(nèi)存是系統(tǒng)自動(dòng)管理的 —— 作用域結(jié)束疯暑,內(nèi)存就釋放
-
堆
堆中的內(nèi)存都需要寫代碼去開辟和釋放
-
原理
看一個(gè)對(duì)象有幾個(gè)引用忘渔,當(dāng)一個(gè)對(duì)象沒(méi)有一個(gè)引用的時(shí)候,對(duì)象對(duì)應(yīng)的內(nèi)存空間就會(huì)被釋放
-
引用
存儲(chǔ)對(duì)象地址的變量
四缰儿、包
- 對(duì)一個(gè)功能的封裝 —— 用函數(shù)
- 對(duì)多個(gè)功能的封裝 —— 模塊和類
- 對(duì)多個(gè)數(shù)據(jù)的封裝 —— 類、字典
- 對(duì)多個(gè)類進(jìn)行封裝 —— 模塊
- 對(duì)多個(gè)模塊進(jìn)行封裝 —— 包
易竹小居士.jpg