美文网首页
千锋的第十四天

千锋的第十四天

作者: 堪怜咏絮才 | 来源:发表于2018-08-02 20:13 被阅读30次

一、重写

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

相关文章

  • 千锋的第十四天

    一、重写 a.完全重写:重新实现从父类继承下来的方法,重写后,子类再调用这个方法的时候,就调用自己的方法b.保留父...

  • #千锋逆战班,云计算 郭燕 - 草稿

    在千锋 “逆战” 学习第16天 早上复习RAID和文件查找 压缩与解压 中国加油!武汉加油!千锋加油!我自己加油!...

  • Unity官方培训认证中心

    想学Unity官方培训认证,就是要找千锋教育! 千锋教育,一向主打教学品质,千锋相信,要收入,先要投成本;要盈利,...

  • 2020-03-19

    千锋逆战班学习第39天 11点后学习打卡 加油自己 加油中国加油武汉

  • PHP学习路线图

    千锋PHP

  • 2020-03-19

    千锋逆战班学习第39天 学习了gtid主从复制 加油自己 加油中国加油武汉

  • 千锋PS基础教程精讲-千锋PS教程

    千锋PS基础教程精讲-千锋PS教程 https://www.jczhijia.com/CourseChapters...

  • 2020-03-03

    千锋云计算打卡 学习的第23天 努力就会有收获 整理了笔记 加油你是最棒的

  • 关于千锋

    千锋教育中国IT教育领先品牌 我们的愿景 成为一个有情怀、有良心、有品质的中国一流IT职业教育机构! 我们的使命 ...

  • #千锋逆战班 郭燕 学习的一天开启

    在千锋"逆战"学习云计算第17天 加油努力 会有好结果 复习昨天知识 中国加油!武汉加油!千峰加油!我自己加油!

网友评论

      本文标题:千锋的第十四天

      本文链接:https://www.haomeiwen.com/subject/qvssvftx.html