一、重寫
繼承后:
a.子類可以擁有除父類繼承的內(nèi)容外欲险,添加其他內(nèi)容和方法
b.父類不可以使用子類的方法和屬性
完全重寫:
重新實(shí)現(xiàn)從父類繼承下來(lái)的方法
保留父類,添加新的功能
對(duì)象調(diào)用時(shí)天试,先看有沒(méi)功能,沒(méi)有才看父類务唐,如果沒(méi)有带兜,看爺類
關(guān)于方法:
a.在子類中可以直接使用的方法
class Ainmals(object):
number=10
"""動(dòng)物類"""
def __init__(self):
self.age=0
self.color=''
def eat(self):
print('吃骨頭')
@classmethod
def get_number(cls):
print(cls.number)
class Dog(Ainmals):
def wtach_door_dog(self):
print('看家')
def eat(self):
super().eat()
print('不好吃')
@classmethod
def get_number(cls):
return super().get_number()
dog=Dog()
dog.name='大飛'
dog.age=3
dog.eat()
dog.wtach_door_dog()
dog.get_number()
二、添加屬性
繼承屬性的時(shí)候刑巧,繼承了init方法
給當(dāng)前類添加對(duì)象屬性,如果要保留父類的對(duì)象屬性啊楚,需要使用supper(),去調(diào)用父類的init方法
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
class Staff(Person):
def __init__(self,name,age,salary):
super().__init__(name,age)
self.salary=salary
if __name__ == '__main__':
s1=Staff('大飛',28,44)
print(s1.salary)
print(s1.age)
class Person:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
self.tall=0
class Student(Person):
def __init__(self,name='',age=0,tel=''):
super().__init__(name,age,sex='女')
self.id='22'
self.score='33'
self.tel=tel
s1=Student('大飛',22,123)
print(s1.name,s1.age,s1.tel)
p1=Person('張飛',22,'男')
print(p1.name,p1.age,p1.sex)
s1=Student('李三',18,110)
print(s1.name,s1.age,s1.sex)
三特幔、運(yùn)算加載符
python中,一個(gè)類下蚯斯,參數(shù)不同,叫重載遭赂,但不支持横辆,只以后面那個(gè)出結(jié)果,前面都覆蓋了
class Student:
def run(self):
print('在跑')
def run (self,name):
print('%s在跑'% name)
s1=Student()
s1.run('yuting')
2.重載困肩,重新定義運(yùn)算符運(yùn)算的過(guò)程
"""
class Student2:
def __init__(self,name='',age=0,height=0):
self.name=name
self.age=age
self.height=height
def __gt__(self, other):
#比較的是屬性值
return self.height>other.height
def __lt__(self, other):
return self.age<other.age
def __add__(self, other):
return self.age+other.age
def __sub__(self, other):
return self.age-other.age
stu1=Student2('aa',18,170)
stu2=Student2('bb',19,150)
if stu1>stu2:
print('====')
if stu1<stu2:
print('====')
print(stu1 + stu2)
print(stu1-stu2)
四脆侮、內(nèi)存管理
python內(nèi)存管理原理
內(nèi)存中兩個(gè)特殊的區(qū)域
棧:里面的內(nèi)存管理是系統(tǒng)自動(dòng)管理(內(nèi)存開(kāi)辟和釋放(作用域結(jié)束,函數(shù)結(jié)束胡釋放潭枣,程序結(jié)束幻捏,就釋放))
堆:需要程序員寫程序來(lái)開(kāi)辟和釋放的(python中也已經(jīng)自動(dòng)化)
原理:堆中的數(shù)據(jù)到底是什么時(shí)候釋放的
看一個(gè)值有幾個(gè)引用,當(dāng)一個(gè)值沒(méi)有引用的時(shí)候篡九,值對(duì)應(yīng)的內(nèi)存空間就會(huì)被釋放
(引用計(jì)算機(jī)制)
引用:存儲(chǔ)對(duì)象地址的變量
五、包的使用
封裝:
對(duì)一個(gè)功能————》函數(shù)
對(duì)功能------》模塊和類
對(duì)數(shù)據(jù)-----》類伊佃、字典
對(duì)多個(gè)類----》模塊
對(duì)多個(gè)模塊---》包(特殊的文件夾讽坏,里面有init.py文件)
導(dǎo)入包
import packbag1
導(dǎo)入某個(gè)包中的模塊
from packbag1 import my_math
導(dǎo)入某個(gè)包的某個(gè)模塊中某個(gè)函數(shù)和類
from packbag1.my_math import sum,Math
作業(yè):
0.定義?一個(gè)學(xué)?生類例证。有屬性:姓名、年年齡胀葱、成績(jī)(語(yǔ)?文,數(shù)學(xué)抵屿,英語(yǔ))[每課成績(jī)的類型為整數(shù)] ?方法: a. 獲取學(xué)?生的姓名:getname() b. 獲取學(xué)?生的年年齡: getage() c. 返回3?門科?目中最?高的分?jǐn)?shù)轧葛。get_course()
class Scores:
def __init__(self):
self.chinese = int(input('語(yǔ)文:'))
self.math = int(input('數(shù)學(xué):'))
self.english = int(input('英語(yǔ):'))
class Student(Scores):
def __init__(self,name,age):
super().__init__()
self.name=name
self.age=age
def get_name(self):
print (self.name)
def get_age(self):
print(self.age)
def get_course(self):
print( '最大值是:',max(self.chinese,self.math,self.english))
s1=Scores
s2=Student('大飛',22)
s2.get_course()
結(jié)果顯示:
語(yǔ)文:1
數(shù)學(xué):2
英語(yǔ):3
最大值是: 3
1.建?立?一個(gè)汽?車類Auto,包括輪胎個(gè)數(shù)求晶,汽?車顏?色衷笋,?車身重量量,速度等成員變量量辟宗,并通過(guò)不不同的構(gòu)造?方法創(chuàng) 建實(shí)例例。?至少要求 汽?車能夠加速 減速 停?車空幻。 再定義?一個(gè)?小汽?車類CarAuto 繼承Auto 并添加空調(diào)晨抡、CD等成 員變量量 覆蓋加速 減速的?方法
class Auto:
def __init__(self,tyre=4,color='yellow',weight=500,speed=100):
self.tyre=tyre
self.color=color
self.weight=weight
self._speed=speed
def fast(self):
if 0<= self._speed<60:
print('請(qǐng)加速')
def slow(self):
if 60<=self._speed<120:
print('請(qǐng)減速')
else:
print('請(qǐng)停車')
a1=Auto()
a1.fast()
a1.slow()
class CarAuto(Auto):
def __init__(self,air,Cd):
super().__init__()
self.air=air
self.Cd=Cd
def fast(self):
if 0<= self._speed<60:
print('請(qǐng)加速')
def slow(self):
if 60<=self._speed<120:
print('請(qǐng)減速')
else:
print('請(qǐng)停車')
a2=CarAuto('格力','好歌')
a2.fast()
a2.slow()
管理理員是?一種特殊的?用戶。編寫?一個(gè)名為Admin 的類如捅,讓它繼承User類调煎。添加?一個(gè)名為privileges 的屬性, ?用于存儲(chǔ)?一個(gè)由字符串串(如"can add post"士袄、"can delete post"娄柳、"can ban user"等)組成的列列表。編寫?一個(gè)名為 show_privileges()的?方法赤拒,它顯示管理理員的權(quán)限诱鞠。創(chuàng)建?一個(gè)Admin 實(shí)例例这敬,并調(diào)?用這個(gè)?方法。
class User:
firstname=''
lastname=''
def __init__(self,name='老張',age=50,sex='男'):
self.name=name
self.age=age
self.sex=sex
def describeuser(self):
print('姓名:%s 年齡:%s 姓名:%s'% (self.name,self.age,self.sex))
def greetuser(self):
print('hello,你好:%s'% self.name)
class Admin(User):
def __init__(self,privileges=''):
super().__init__()
self.privileges=privileges
def show_privileges(self):
print('管理權(quán)限:%s'% self.privileges)
a1=Admin(['can add post', 'can delete post', 'can ban user'])
a1.show_privileges()
3.創(chuàng)建?一個(gè)Person類阳掐,添加?一個(gè)類字段?用來(lái)統(tǒng)計(jì)Perosn類的對(duì)象的個(gè)數(shù)
class Person:
count=0
def __init__(self,name=''):
self.name=name
Person.count+=1
p1=Person('張三')
p2=Person('李四')
print(Person.count)