2高级编程-面向对象上-类、实例属性-类、实例方法-__init__方法-全栈式开发15

面向对象上

  • 非常重要
  • 面向对象编程 (opp)是一种程序设计思想
  • 所谓面向对象的语言,简单理解就是语言中的所有操作都是通过对象来进行的

一、面向对象

引入

  • 我们目前学习的都是Python的内置对象,但是内置对象并不都能满足我们的需求,所以我们在开发中经常要自定义一些对象,类简单理解它就是相当于一个图纸,在程序汇总我们需要根据类来创建对象。类就是对象的图纸,我们也称对象是类的实例(instance),类和对象都是对现实生活中事物的抽象

特点

  • 面向对象的编程语言,关注的是对象,而不注重过程,对于面向对象一切皆对象
  • 面向对象的编程思想,将所有功能统一保存到对应的对象中,要使用某个功能,直接找到对应的对象即可
  • 这种编码方式比较容易阅读,并且易于维护,容易复用。但是编写的过程中不太符合常规的思维,编写相对麻烦

面向过程与面向对象的区别

  • 面向过程
    根据业务逻辑从上到下写编程
  • 面向对象
    将数据与函数绑定在一起,进行封装、减少重复代码的重写过程,函数只能实现一个功能,而且函数多,标识符不好取名,也不好定位函数在哪

面向过程

  • 面向过程指将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序。这种编写方式往往只适用于一个功能,如果要实现别的功能,往往复用性比较低, 这种编程方式符号人类的思维,编写起来比较容易
    • 1.妈妈穿衣服穿鞋出门
      2.妈妈骑上电动车
      3.妈妈到超市门口放好电动车
      4.妈妈买西瓜
      5.妈妈结账
      6.妈妈骑电动车回家
      7.到家孩子吃西瓜
  • 而面向对象针对以上方式可以用 孩子妈妈给孩子买瓜来解决,将孩子妈妈作为对象,当成一个类,而在类里面可以细分妈妈做的事,这样做哪些事都可以通过妈妈这个对象来调用

二、class

  • class 定义类

(一)class 类的定义

类的定义

  • 类也是一个对象,类就是用来创建对象的对象
    • 注意:python中想要使用一个东西,必须得创建对象,所以类也是对象,但是python不会很占内存,因为有python垃圾回收机制
  • 类只是用于存储属性、’功能,类可以创建多个实例,每个实例各不相同,这一些实例称呼为一类实例一类实例,类里面有的,实例里面一定会有
  • 类的实例化:my = Myclass()
class Myclass():  ##定义类,给它取名为Myclass, 类对象
    pass
my = Myclass()   ##创建实例对象  ,my就是面对对象的对象  实例对象 实现效果的功能,面向对象操作的是实例对象

类的内容

  • 类包含两部分:数据(属性)行为(方法)
    • 类内部的变量称之为属性 ,分为类属性和实例属性,实例.属性就可以得到属性值
    • 类内部的函数叫方法
    • 类中定义的属性和方法都是公共的,任何该类实例都可以访问
      • 属性:类属性与实例属性
      • 方法:类方法、实例和静态方法

(二)研究类内部

类属性与实例属性

  • 类属性
    • 定义在类中的变量会成为该类实例的公共属性,所有的实例、类自身都可以通过对象.属性的形式来访问
    • 类属性只能通过类对象来修改
    • 类属性只会运行一次,就是在类创建的时候
      类的实例化的时候不会再次运行类属性,直接从方法开始运行,所以在方法里面对类属性的值重新赋值会直接改变类属性
  • 实例属性
    • 通过实例对象来添加的就是实例属性,可以通过类实例对象调用,不可以通过类来调用
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

类方法、实例方法 和静态方法

  • 类方法

    • 实例方法加上@classmethod 的装饰器
    • 自动创建cls参数,调用方法时不需要再传cls函数,等于类对象
    • 类和实例对象都可以调用
    • 如果用super重写类方法的话,@classmethod也要重写一遍
  • 实例方法

    • 定义在类中的方法会成为该类实例的公共方法,所有的实例都可以通过对象.函数()的形式来调用
    • 自动创建self参数,调用方法时不需要再传self函数,等于当前实例对象
    • 类对象也可以调用A.fun(a) ,但是一定要传实例对象进去,A是类对象,a实例对象
  • 静态方法

    • 在类中用@staticmethod来修饰的方法属于静态
    • 类和实例对象都可以调用的方法,静态变量只是存储在类的普通函数,加上@staticmethod就是静态变量,不需要指定任何的默认参数,类方法、实例方法必须通过self 和cls来调用内部函数和内部属性
    • 静态变量和外部函数一样,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述

参数self或cls

  • 实例方法必须有self参数、类方法必须有cls参数,在调用时会自动传入
  • self在设定的时候,每一次运行方法时候self=当前的实例对象 的赋值过程,不固定,当前谁是对象,self就是谁,cls参数 = 类对象
  • 当前实例对象的值传给self并不会遗留给下一位对象
  • self、cls的名字并不是规定死的,但是最好还是按照约定是用self、cls
    在这里插入图片描述
    在这里插入图片描述

(三)类调用

  • 建立对象:对象名=类名() ls=Student() 类似a=list()
    调用方法:对象名.方法名() ls.fun()
  • 方法调用和函数调用的区别:
    • 如果是函数调用,调用:函数名()
      • 调用时有几个形参,就会传入几个实参
    • 如果是方法调用,调用:对象.函数名()
      • 默认参数self实例对象调用不需要传值,类对象调用要传实例对象进去

(四)type 与 isinstance

  • type 不考虑继承关系
  • isinstance考虑继承关系
    • isinstance(参数1,参数2)
      • 参数1 :检测类型的对象
      • 参数2 :检测的属于哪个类,可以单个或多个(多个用元组传,进行的是or运算,只要一个满足就行)
      • 返回的是布尔值
        在这里插入图片描述

(五) __init__方法

定义

  • 称为初始化方法,也称为构造方法。在创建对象时,会自动执行该方法,为对象的属性设置初始值,所以在该变量里所赋予的属性已经变成了该实例的公用属性
  • 不能添加不定长参数
  • __init__的传参是在类里面传递的 lz=Student(‘lz’,1) 形参有多少个在类里也要传几个

作用

  • 因为按之前的写法,信息暴露外面,不安全,而且像这样只能一个一个传参,如果可以在类创建是时候就可以把信息传进去,不用调用方法传进去
  • 会自动执行该方法在这里插入图片描述
    在这里插入图片描述

注意:

(1)__init__方法可以像函数一样有自定义返回值吗?
  • 不可以,不能用return返回值,但是可以用其他函数
    在这里插入图片描述
    在这里插入图片描述
(2)在没有调用该方法的时候,可以调用这__init__方法里面的属性吗?
  • 可以,在创建类的时候会自动调用该代码
    注意:
    类的内部中,除了init方法,其他方法定义属性的属性都需要对象对该方法调用了,才可以访问里面的属性

    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋芋本人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值