首页 > 其他分享 >面向对象汇总

面向对象汇总

时间:2022-11-06 14:45:26浏览次数:50  
标签:__ 功能 对象 继承 汇总 面向对象 父类

本周内容概要

目录

  • 面向对象前戏之人狗大战
  • 两种编程思维
  • 类与对象
  • 动静态方法
  • 面向对象之继承
  • 面向对象之派生

本周内容详情

面向对象前戏之人狗大战

人狗大战>>>引出了面向对象
推导过程:
1.定义出人和狗的字典 但要创多个人或狗就会重复的编辑信息
2.将产生人和狗的字典封装成函数,并定义出人打狗或者狗咬人的动作 但没有指定就会出现人用狗的动作 狗用人的动作
3.让人只能调人的攻击动作,狗只能调狗的攻击动作(数据与功能的绑定)
总结:
将人的数据跟人的功能绑定在一起
将狗的数据跟狗的功能绑定在一起

以上得出 面向对象的核心思想:数据与功能的绑定

两种编程思想

1.面向过程编程
过程就是流程  面向过程编程就是按照固定的流程解决问题
即 按照指定的步骤依次执行 最终得到想要的结果
2.面向对象编程
对象就是 容器 里面是数据与功能的结合体(万物皆对象)
但只负责创造出人物及功能 至于后续发展如何不知道
"""
面向过程编程:相当于让你给出一个问题的具体解决方案
面向对象编程:相当于让你创造出一些事物,之后不用你管
"""

# 两者无好坏,需结合具体需求
# 如需求是注册登录   面向过程合适
# 如需求是游戏人物   面向对象更合适

类与对象

1.类与对象的概念

对象:数据与功能的结合体 对象才是核心

类:多个对象相同数据与功能的结合体 类主要是为了节省代码

2.类与对象创建

现实中一般是现有个体(对象),再有群体(类)
程序中必须先定义类,再产生对象

面向对象本质就是将数据和功能绑定在一起,为了突出面向对象编程,python专门设计了新的语法格式

2.1类的语法结构

class 类名:
    对象公共的功能
    对象公共的功能
1.class 是定义类的关键字
2.类名的命名和变量名一致,'首字母要大写'为了函数名区别
3.数据  变量名与数据值的绑定
  功能   也叫方法 其实就是函数

2.2类的定义与调用

1.类在定义阶段就会执行类体代码,但是类的局部名称空间外界无法直接调用
2.类和对象获取内部数据的方法可以统一采用:句点符
3.类名()就会产生对象,每执行一次就会产生一个新的对象

2.3对象独有的数据

推导流程:
1.通过利用__dict__的方法来向字典添加键值对 由于代码重复
2.将添加独有数据的代码封装成函数 任何对象都可以调用给数据的函数
3.给学生对象添加独有数据的函数只有学生对象有资格调用  
4.init变形
当内部有__init__时:
类名会把产生的空对象和参数一起传给__init__
然后给对象添加独有的数
5.变量名修改

2.4对象的独有的功能(实例化)

就是只能将函数放在类中 但是类中的函数又是对象公共的 
定义在类中的功能 默认就是绑定给对象使用的 谁来调谁就是主人公
注意:
  1.类调用功能需自己传一个参数
  2.对象调用功能会自动将对象当作第一个参数传入

动静态方法

在类中定义函数有三种

1.类中直接定义函数

默认是绑定给对象的方法

1.1对象调用会自动将对象当作第一个参数传入

1.2类调用需要手动将对象当作第一个参数传入

self 用来接收对象

2.被@classmethod修饰的函数

默认是绑定给类的方法

2.1类调用会自动将类当第一个参数传入

2.2对象调用会将产生该对象的类当作第一参数传入

cls 用来接收类

3.被@staticmethod修饰的函数

会变成普通的函数 被@staticmethod修饰 也叫静态方法

注意:无论是对象还是类调用 有多少参数就传多少参数

面向对象之继承

1.继承的概念

面向对象的三大特性 :封装 继承 多态

继承 含义 目的
现实 用来表示人与人之间资源的关系 占有别人的财产
编程 用来表示类与类之间数据的关系 类A拥有类B中所有数据和方法的使用权

2.继承的基本操作

2.1.定义类的时候类名后加括号填写其他类名,意味着可以去继承该类

2.2.当要继承多个类的时候,括号里需逗号隔开

被继承的类:#父类、基类、超类
继承类的类:#子类、派生类

3.继承的本质

 对象:数据与功能的结合体
 子类:多个对象相同数据和功能的结合体
 父类:多个子类相同数据和功能的结合体
子类与父类的本质就是为了节省代码

继承的本质:
抽象:将多个类相同的东西抽出去形成一个新的父类
继承:让子类继承刚刚抽出去的父类
就是把相同的代码抽出来变成一个父类,其他类想用的时候就变成子类继承父类,子类可以调用父类中的资源

4.对象查找名字的顺序

4.1不继承的情况

对象自身 >>> 该对象的类

4.2 单继承的情况

对象自身 >>> 该对象的类 >>> 父类

4.3多继承的情况

1.菱形继承
 广度优先(从左到右每条道不会走最后闭合的点,最后才会走)
2.非菱形继承
深度优先(从左到右每条道走完为止)
ps:print(类.mro())方法可以获取名字查找顺序

5.经典类与新式类

object中有类必备的所有功能

经典类:不继承object或其子类的类
新式类:继承了object或其子类的类

#在python2中有经典类和新式类
    由于经典类中没有核心的功能所以在python3中就取消了
    
#在python3中只有新式类
    '所有的类'默认都继承了object

今后在定义类时,如果没有要继承的父类就写继承object!目的时为了兼容python2

面向对象之派生

子类基于父类又做了扩展可以简单理解成:想用别人的方法,又觉得别人方法不够

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Student(Person):
    def __init__(self, name, age, play):
        super().__init__(name, age)  # 子类调用父类的方法
        self.play = play # 自己补充的数据

obj = Student('jason', 18, 'run')
print(obj.__dict__)  # {'name': 'jason', 'age': 18, 'play': 'run'}


练习:扩展列表尾部追加方法(不能追加jason)

class Mylist(list):
    def append(self, v1):
        if v1 == 'jason':
            print('不能追加jason')
            return
        super().append(v1)

obj = Mylist()
print(obj, type(obj))  # [] <class '__main__.Mylist'>
obj.append(1)
print(obj)  # [1]
obj.append('jason')
print(obj) # 不能追加jason [1]

标签:__,功能,对象,继承,汇总,面向对象,父类
From: https://www.cnblogs.com/zjl248/p/16862574.html

相关文章

  • 面向对象周总结
    目录面向对象周总结人狗大战面向对象核心思路编程思想面向对象类与对象类与对象的创建对象独有的数据对象独有的功能动静态方法面向对象继承的概念继承的本质名字的查找顺......
  • Oralce资识点汇总
    启服务1.linux下启动oraclesu-oracleesqlplus/nologconn/assysdbastartupexitlsnrctlstartexit停服务2.linux下关闭oraclesu-oraclesqlplus/nolog......
  • 【重识云原生】计算第2.3节——主流虚拟化技术之Xen[汇总整理]
     最新文章欢迎关注笔者公众号“畅游云海”  《重识云原生系列》专题索引:第一章——不谋全局不足以谋一域第二章计算第1节——计算虚拟化技术总述第二章计算第2节—......
  • 【杂题汇总】NOIP 2022 杂题目录
    这里单纯的是一些题目,看到有意思的题会在这里记下来,也可以当做Todolist啦解析的话在这里[ARC147E]Examination[CF573E]BearandBowling[CF498D]TrafficJamsi......
  • JAVA语言学习-面向对象(1)
    类与对象类类是JAVA语言中重要的复合型数据类型()。类的实现包括两个部分:成员变量和成员方法("方法"可以看作是C语言中的函数)类的声明要使用类,首先得对其声明。声明......
  • C++《面向对象程序设计课程设计》
    C++《面向对象程序设计课程设计》《面向对象程序设计课程设计》课程说明适用专业:计算机科学与技术课程周数:5周一、根据计算机科学与技术专业人才培养方案制订。(一)课程......
  • 【线性代数】抽丝剥茧系列汇总篇
    耗时两周,说长不长,说短不短,总算肝完了。ProfessorStrang讲的线代真的深入浅出,这次算是真正线性代数入了门,看到与线代相关的东西不会怯了!目录:【线性代数】抽丝剥茧系列......
  • 首选线程池,而不是多线程; 创建线程的方法; 存储过程和for循环插入数据; String字符串一般
    首选线程池,而不是多线程首选线程池,而不是多线程/**corePoolSize:线程长期为维持线程数核心线程数,常用线程数maximumPoolSize:线程数的上限,最大线程数keepAliveTime:超过线......
  • python之路之 面向对象动静态方法、继承、派生
    昨日内容回顾人狗大战1.直接使用字典表示人和狗 p1={} p2={} p3={} p4={}2.封装产生人和狗的函数 defcrreate_person():passdefcreate_dog():p......
  • 微信公众号开发异常码及异常原因汇总
    返回码说明-1系统繁忙,此时请开发者稍候再试0请求成功40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正......