一、重写
a.完全重写:重新实现从父类继承下来的方法,重写后,子类再调用这个方法的时候,就调用自己的方法
b.保留父类实现的功能,再添加新的功能
对象和类调用方法的过程:先看当前类是否存在这个方法,没有才看父类有没有这个方法,依次向上寻找,寻找祖宗十八代,直到基类(object)为止
class Person:
def __init__(self):
self.number = 0
self.color = 'yellow'
def step(self):
print('每个人都会走路!')
class Chinese(Person):
def __init__(self,name,age):
super().__init__()
self.name = name
self.age = age
def step(self):
super().step()
print('除了走之外,还会跑!')
p1 = Chinese('张三',18)
print(p1.number)
print(p1.color)
print(p1.name)
print(p1.age)
print(p1.step())
结果:0
yellow
张三
18
每个人都会走路!
除了走之外,还会跑!
None
二、添加属性
对象属性的继承:是通过init方法来继承对象属性的
给当前类添加对象属性:重写init方法
注意:如果要保留父类的对象属性,需要使用super()去调用父类的init方法
多态:因为可以重写,所以存在多态。因为重写的时候,可以给出不同的内容
所以同一种方法在不同的类中可以有多重形态
类的多态:继承产生多态
练习:声明人类,有属性,名字,年龄,性别,身高
要求创建人的对象的时候,可以给名字,性别,年龄赋初值
再创建学生类继承自人类,拥有人类的所有属性,再添加学号、成绩。电话属性
要求创建学生对象的时候可以给名字,年龄和电话赋初值
class Person:
def __init__(self,name,age,sex='男'):
self.name = name
self.age = age
self.sex = sex
self.height = 1.7
class Student(Person):
def __init__(self,name,age,tel):
super().__init__(name,age)
self.study_id = 123
self.scores = 45
self.tel = tel
stu1 = Student('张飒',18,123456)
print(stu1.name,stu1.age,stu1.sex,stu1.height,stu1.study_id,stu1.scores,stu1.tel)
结果:张飒 18 男 1.7 123 45 123456
三、重载
1.重载:一个类中可以有多个名字相同的方法,但是参数个数不一样,python中不支持重载
2.运算符的重载------一般只重载+,-,*,/
class Student:
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score
def __gt__(self, other):
return self.age > other.age
def __add__(self, other):
return self.name+other.name
stu1 = Student('张三',15,98)
stu2 = Student('李四',16,95)
if stu1 > stu2:
print('学生1大于学生2')
else:
print('学生1小于学生2')
print(stu1+stu2)
结果:学生1小于学生2
张三李四
四、python中的内存管理
内存中有两个特殊的区域:栈、堆
栈:栈中的内存是系统自动管理的(内存的开辟和内存的释放)-----作用域结束内存就释放
堆:堆中的内存都需要写程序去开辟和释放的(python中这个过程也已经自动化了)
原理?:堆中的数据到底是什么时候释放的额?
看一个对象有几个引用,当一个值没有引用的时候,对象对应的内存空间就会被释放
(引用计数机制)
引用:存储对象地址的变量
五、包的使用
封装:
对功能的封装------>用函数
对多个功能的封装----->模块和类
对多个数据进行封装----->类、字典
对多个类进行封装------>模块
对多个模块进行封装----->包(文件夹)
导入某个包中的某个模块
from package import my_math
导入某个包的某个模块的某个函数和类
from package.my_math import sum,Math
作业
"""0.定义一个学生类。有属性:姓名、年龄、成绩(语文,数学,英语)[每课成绩的类型为整数]
方法:
a. 获取学生的姓名:get_name()
b. 获取学生的年龄:get_age()
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):
return self.name
def get_age(self):
return self.age
def get_course(self):
return max(self.chinese, self.math, self.english)
stu1 = Student('张三',18)
print(stu1.get_name(),stu1.get_age(),stu1.get_course())
结果:请输入语文成绩:89
请输入数学成绩:88
请输入英语成绩:87
张三 18 89
"""1.建立一个汽车类Auto,包括轮胎个数,汽车颜色,车身重量,速度等成员变量,并通过不同的构造方法创建实例。至少要求 汽车能够加速 减速 停车。 再定义一个小汽车类CarAuto 继承Auto 并添加空调、CD等成员变量 覆盖加速 减速的方法"""
class Auto:
def __init__(self,tyre=4,color='black',weight=2000,speed=60):
self.tyre = tyre
self.color = color
self.weight = weight
self._speed = speed
def speed_up(self,speed):
if speed > self._speed:
return '加速'
def speed_down(self,speed):
if speed < self._speed:
return '减速'
def park(self,speed):
if not speed:
return '停车'
class CarAuto(Auto):
def __init__(self,air_conditioner,CD):
super().__init__()
self.air_conditioner = air_conditioner
self.CD = CD
def speed_up(self,speed):
if speed > self._speed:
return '你确定要加速吗?'
def speed_down(self,speed):
if speed < self._speed:
return '你确定要减速吗?'
auto = Auto()
print(auto.speed_up(70),auto.speed_down(50),auto.park(0))
carauto = CarAuto('有','有')
print(carauto.speed_up(70),carauto.speed_down(40))
结果:加速 减速 停车
你确定要加速吗? 你确定要减速吗?
"""2.创建一个名为User 的类,其中包含属性first_name 和last_name ,还有用户简介通常会存储的其他几个属性。在类User 中定义一个名 为describe_user() 的方法,它打印用户信息摘要;再定义一个名为greet_user() 的方法,它向用户发出个性化的问候。
管理员是一种特殊的用户。编写一个名为Admin 的类,让它继承User类。添加一个名为privileges 的属性,用于存储一个由字符串(如"can add post"、"can delete post"、"can ban user"等)组成的列表。编写一个名为show_privileges()的方法,它显示管理员的权限。创建一个Admin 实例,并调用这个方法。
class User:
first_name = '张三'
last_name = '李四'
def __init__(self,name='张三',age=40,job='老司机'):
self.name = name
self.age = age
self.job = job
def describe_user(self):
print('姓名:%s 年龄:%s 工作:%s' %(self.name,self.age,self.job))
def greet_user(self):
return '%s 您好,欢迎使用本系统!' % self.name
class Admin(User):
def __init__(self,privileges=''):
super().__init__()
self.privileges = privileges
def show_privileges(self):
return '管理权限'
admin = Admin(["can add post","can delete post","can ban user"])
print(admin.show_privileges())
结果:管理权限
3.创建一个Person类,添加一个类字段用来统计Perosn类的对象的个数
class Person():
count = 0
def __init__(self):
Person.count += 1
p1 = Person()
p2 = Person()
print(Person.count)
结果:2
网友评论