day14总结
一、重写
继承后:
a.子类可以拥有除父类继承的内容外,添加其他内容和方法
b.父类不可以使用子类的方法和属性
完全重写:
重新实现从父类继承下来的方法
保留父类,添加新的功能
对象调用时,先看有没功能,没有才看父类,如果没有,看爷类
关于方法:
a.在子类中可以直接使用的方法
class Ainmals(object):
number=10
"""动物类"""
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()
二、添加属性
继承属性的时候,继承了init方法
给当前类添加对象属性,如果要保留父类的对象属性,需要使用supper(),去调用父类的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)
三、运算加载符
python中,一个类下,参数不同,叫重载,但不支持,只以后面那个出结果,前面都覆盖了
class Student:
def run(self):
print('在跑')
def run (self,name):
print('%s在跑'% name)
s1=Student()
s1.run('yuting')
2.重载,重新定义运算符运算的过程
"""
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)
四、内存管理
python内存管理原理
内存中两个特殊的区域
栈:里面的内存管理是系统自动管理(内存开辟和释放(作用域结束,函数结束胡释放,程序结束,就释放))
堆:需要程序员写程序来开辟和释放的(python中也已经自动化)
原理:堆中的数据到底是什么时候释放的
看一个值有几个引用,当一个值没有引用的时候,值对应的内存空间就会被释放
(引用计算机制)
引用:存储对象地址的变量
五、包的使用
封装:
对一个功能————》函数
对功能------》模块和类
对数据-----》类、字典
对多个类----》模块
对多个模块---》包(特殊的文件夹,里面有init.py文件)
导入包
import packbag1
导入某个包中的模块
from packbag1 import my_math
导入某个包的某个模块中某个函数和类
from packbag1.my_math import sum,Math
作业:
0.定义⼀一个学⽣生类。有属性:姓名、年年龄、成绩(语⽂文,数学,英语)[每课成绩的类型为整数] ⽅方法: a. 获取学⽣生的姓名:getname() b. 获取学⽣生的年年龄: getage() c. 返回3⻔门科⽬目中最⾼高的分数。get_course()
class Scores:
def __init__(self):
self.chinese = int(input('语文:'))
self.math = int(input('数学:'))
self.english = int(input('英语:'))
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()
结果显示:
语文:1
数学:2
英语:3
最大值是: 3
1.建⽴立⼀一个汽⻋车类Auto,包括轮胎个数,汽⻋车颜⾊色,⻋车身重量量,速度等成员变量量,并通过不不同的构造⽅方法创 建实例例。⾄至少要求 汽⻋车能够加速 减速 停⻋车。 再定义⼀一个⼩小汽⻋车类CarAuto 继承Auto 并添加空调、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('请加速')
def slow(self):
if 60<=self._speed<120:
print('请减速')
else:
print('请停车')
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('请加速')
def slow(self):
if 60<=self._speed<120:
print('请减速')
else:
print('请停车')
a2=CarAuto('格力','好歌')
a2.fast()
a2.slow()
管理理员是⼀一种特殊的⽤用户。编写⼀一个名为Admin 的类,让它继承User类。添加⼀一个名为privileges 的属性, ⽤用于存储⼀一个由字符串串(如"can add post"、"can delete post"、"can ban user"等)组成的列列表。编写⼀一个名为 show_privileges()的⽅方法,它显示管理理员的权限。创建⼀一个Admin 实例例,并调⽤用这个⽅方法。
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('管理权限:%s'% self.privileges)
a1=Admin(['can add post', 'can delete post', 'can ban user'])
a1.show_privileges()
3.创建⼀一个Person类,添加⼀一个类字段⽤用来统计Perosn类的对象的个数
class Person:
count=0
def __init__(self,name=''):
self.name=name
Person.count+=1
p1=Person('张三')
p2=Person('李四')
print(Person.count)