首页 > 其他分享 >第六周总结

第六周总结

时间:2022-11-06 16:02:19浏览次数:37  
标签:总结 __ name 面向对象 继承 第六周 对象 class

第六周总结

面向对象与类

面向对象概述

面向对象可以说是一种编程思想,我们之前所学习的变成可以称之为面向过程编程,就是按照流程一步一来,但是面向对象不是。首先面向对象在编程中就是数据与功能的绑定,即功能或数据只能给特定的对象使用,其次对象在python中可以看成是容器用于存放数据与功能,那么可以概括地说对象就是数据与功能的结合体
ps:python中一切皆对象

面向对象之类与对象

面向对象不是一门新的技术,但是为了使用方便和很好的区分开,针对面向对象设计了新的语法格式,在python中要产生对象就必须要借助类

类的语法结构:
    class 类名(通常首字母大写):
        对象公共的数据
        对象公共的功能
    1.class 是定义类的关键字
    2.类名的命名与变量名几乎一致,但是为了区分开类名与变量名所以一般推荐类名首字母大写
    3.数据就是变量名与数据值的绑定,功能就是函数
类的定义与调用
    类在定义阶段就会执行类体代码,但这是属于类的局部名称空间,外界无法直接调用,如果需要访问数据或功能,那么可以统一采用句点符
    要访问数据可以通过点加变量名来访问
    类名加括号是产生对象,产生的对象本身没有任何数据,但是它可以通过点加变量名的方式来使用类里面的数据和方法

对象独有的数据与方法

class Student:
    school_name = '老男孩'
    def __init__(stu, name, age):
        stu.name = name  # stu.__dict__['name'] = name
        stu.age = age

    def choice_course(self):
        print('选择课程')
stu1 = Student('laj', 3)
print(stu1.__dict__)  # {'name': 'laj', 'age': 3}
这是对象独有数据的添加
严格意义上来说对象没有自己独有的功能,它所使用的功能是定义在类里面的公共函数,只是类有一个特征:功能是公共的,结果是独有的(对象在使用功能时会将自己当做第一个参数传入)
class Student:
    school_name = '老男孩'

    def __init__(stu, name, age):
        stu.name = name  # stu.__dict__['name'] = name
        stu.age = age
 
    def choice_course(self):
        print('选择课程')

Student.choice_course(123)  # 选择课程
stu1.choice_course()  # 选择课程

动静态方法

类中定义的函数有多种特性
class Student:
    school_name = '羊村'
    
    # 类中直接定义的函数默认绑定给对象,类调用时需要几个参数就传几个参数,对象调用时会将自己当做第一个参数传进去
    def func1(self):
        print('喜羊羊牛掰噶拉斯')
    
    # 被@classmethod修饰的函数,默认绑定给类,类调用时第一个参数就是类本身,对象调用时会将产生该对象的类当做第一个参数传进去
    @classmethod
    def func2(cls):
        print('舔狗沸羊羊')
        
    # 普通的函数,无论是类还是对象调用都需要手动传参
    @staticmethod
    def func3(a):
        print('羡慕懒洋洋')
        
obj = Student()
obj.func1()  # 喜羊羊牛掰噶拉斯
Student.func1(1)  # 喜羊羊牛掰噶拉斯

Student.func2()  # 舔狗沸羊羊
obj.func2()  # 舔狗沸羊羊

Student.func3(1)  # 羡慕懒洋洋
obj.func3(2)  # 羡慕懒洋洋

面向对象之继承

面向对象中继承的概念

面向对象三大特性:封装、继承、多态
1.继承的含义
    表示资源的从属关系
    eg:爸爸有一个亿,儿子啥都没有,但是儿子继承了爸爸后就可以使用这一个亿
        编程中也一样,A类有数据和功能,B类没有,那么B类继承了A类后就拥有了A类的数据和功能
2.继承实操
    class Father:
        money = '我有一个亿'
        
    class son(Father):
        pass
    1.继承类(son)我们称之为子类、派生类
    2.被继承类(Father)我们称之为父类
    3.子类定义时要继承谁就在括号内填写谁的名字, 继承多个时括号内直接填写多个类名用逗号隔开即可
3.继承的本质
    继承的本质可以参考类和对象
    对象是数据与功能的结合体
    类是多个对象的相同数据和功能的结合体
    父类是多个子类的相同数据和功能的结合体
    # 都是为了节省代码!!!
    继承本质可以分为两部分
        抽象:把多个类相同的东西抽出去组成一个新的类
        继承:多个类继承刚刚抽取出的新类

名字的查找顺序

1.不继承情况下名字的查找顺序
    先从对象自己的名称空间中查找
    再去产生该对象的类中查找
    如果类里面也没有则报错
2.单继承下名字的查找
    先找对象自己,再找产生对象的类,最后找父类,都没有就报错
3.多继承情况下名字的查找顺序
    如果继承的父类没有继承那么就是按照继承时括号内填写的顺序从左往右查找
    其他情况:
    情况一
        class S1(F1):
        a = 4
    class S2(F2):
        a = 5
    class S3(F3):
        a= 6
    class B(S1, S2, S3):
        pass
    obj1 = B()
    print(obj1.a)
    此种情况称之为非菱形继承,它的查找顺序是(关系图见图一)
        obj1 > B > S1 > F1 > S2 > F2 > S3 > F3 
        非菱形继承的特点是深度优先(从左往右每条分支都走完再去下一条分支)
情况二:菱形继承
    class G:
        a = 7
    class F1(G):
        a = 1
    class F2(G):
        a = 2
    class F3(G):
        a= 3
    class S1(F1):
        a = 4
    class S2(F2):
        a = 5
    class S3(F3):
        a= 6
    class A(S1, S2, S3):
        pass
    obj = A()
    print(obj.a)
    此种情况称之为菱形继承,它的查找顺序是(关系图见图二)
        obj1 > B > S1 > F1 > S2 > F2 > S3 > F3 > G
        菱形继承的特点是广度优先,闭环的点G最后才会去找

图一
image
图二
image

经典类与新式类

经典类:不继承object或者其子类的类
新式类:继承object或者其子类的类
    在python2中有经典类和新式类
    在python3中只有新式类(所有类默认都继承object)

派生方法

子类基于父类的某个方法做了扩展
class A:
    def __init__(self, a, b, c)
    self.a = a
    self.b = b
    self.c = c
class B(A):
    def __init__(self, a, b, c, d)
    super().__init__(a, b, c)
    self.d = d
A类中定义了一个方法,但是这个方法只能添加a,b,c三个数据,现在需要多添加一个数据d,原本A类中的方法不能改
所以就用到了派生方法
    在不改变原方法的基础上做扩展

标签:总结,__,name,面向对象,继承,第六周,对象,class
From: https://www.cnblogs.com/zyg111/p/16862796.html

相关文章

  • 2022-2023-1 20221404 《计算机基础与程序设计》第十周学习总结
    2022-2023-120221404《计算机基础与程序设计》第十周学习总结作业信息班级链接(2022-2023-1-计算机基础与程序设计)作业要求(2022-2023-1计算机基础与程序设计......
  • 服务器项目部署总结
    参考声明:https://baijiahao.baidu.com/s?id=1702319821126368710&wfr=spider&for=pc文章目录[系列文章目录](javascript:void(0))[前言](javascript:void(0))[一、......
  • 面向对象周总结
    目录面向对象周总结人狗大战面向对象核心思路编程思想面向对象类与对象类与对象的创建对象独有的数据对象独有的功能动静态方法面向对象继承的概念继承的本质名字的查找顺......
  • 11.6总结
    内容回顾面向对象之类与对象对象独有的数据功能(属性,方法)编程思想动静态方法继承的概念/本质名字查找顺序经典类与新式类派生方法1.类与对象面向对象编程的主题......
  • 2022-2023 20221410《计算机基础与程序设计》第十周学习总结
    学期(2022-2023-1)学号(20221410)《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作......
  • 本周总结(11.06)
    本周主要完成了老年病的页面原型,软件开发案例的一些WinForm界面。完成了Redis的基础学习。下周计划:1、尽力完成一份自己的简历2、继续学习算法,Leetcode刷题3、自己的博......
  • 信创服务器操作系统总结
    第一部分摘要自从提出没有网络安全就没有国家安全之后信创操作系统的发展进入了快车道.流行的操作系统主要分为如下几个大方面:1.宣称二进制兼容CentOS的部分系列:......
  • MySQL索引开发中可能会用到的知识总结
    索引 适合建立索引建立索引之后,在B+树中的记录是排序好的,所以频繁使用orderby和group的字段可以建立索引,同时唯一性限制的字段也适合建立索引,比如商品编码经......
  • 2022-2023-1 20221425 《计算机基础与程序设计》第十周学习总结
    学期(如2022-2023-1)学号(如:20221425)《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这......
  • 2022-2023-1 20221306 《计算机基础和程序设计》第十周学习总结
    作业信息这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10作业目标学习......