面向对象

面向对象是一种认识世界、分析世界的方法论,将万事万物抽象为类。

类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合,用计算机语言描述类,就是属性和方法的集合。

一切皆对象

对象是数据和操作的封装

对象是独立的,但是对象之间可以相互作用

目前OOP是最接近人类认知的编程范式

面向对象三要素

  • 封装

    • 组装:将数据和操作组装到一起

    • 隐藏数据:对外只暴露一些接口,通过接口访问对象。

  • 继承

    • 多复用,继承来的就不用自己写了。

    • 多继承少修改,OCP(Open-closed Principle),使用继承来改变,体现个性。

  • 多态
    • 面向对象变成是最灵活的地方,动态绑定。

Python的类

  • 定义

    • 引用块内容

    • 必须使用class关键字

    • 类定义完成后,就产生一个类对象,绑定到了标识符ClassName上。

    • 类属性收class管控,获取类属性使用 “.”

  • 类对象及类属性

    • 类对象,类定义后就会生成一个类对象。

    • 类的属性,类定义中的变量和类中定义的方法都是类的属性。

    • 类变量,上例中x是类的变量。

    • foo是方法对象method,不是普通的函数对象了,它一般要求至少一个参数。第一个参数可以是selfself只是个惯用标识符,可以换名字),这个参数位置就留给了self

  • 实例化

    • 在类对象后面加上一个括号,就调用类的实例化方法,完成实例化。

    • 每次实例化后获得的实例,是不同的实例,即使是使用同样的参数实例化,也得到不一样的对象。实例化是调用 __new__方法。

    • python类实例化后,会自动调用 __init__方法,这个方法的第一个参数必须留给self,其它参数随意。

  • __init__方法

    • python类实例化后,会自动调用 __init__方法,如果没有定义,会在实例化后隐式调用。作用:对实例进行初始化。

    • 此方法不能有返回值,也就是只能return None

  • 实例对象instance

    • 类实例化后一定会获得一个实例对象。

    • 实例对象会绑定方法,调用方法时采用点号调用jerry.show_age()show_age()会自动把jerry传入self中。

    • self.name就是jerry对象中的name,称为实例变量。

引用块内容

  • self
    • self就是调用者,就是c对应的实例对象。

引用块内容

  • 实例变量和类变量

    • 实例变量是每一个实例子集的变量,是自己独有的。

    • 类变量是类的变量,是类的所有实例共享的属性和方法。

引用块内容

    • python中每一种对象都拥有不同的属性。函数、类都是对象,类的实例也是对象。

    • 是类的,也是这个类所有实例的,其实例都可以访问到;实施例的,就是这个实例自己的,通过类访问不到。类变量是属于类的变量,这个类的所有实例都可以共享这个变量

    • 对象(实例或类)可以动态的给自己增加一个属性。实例.__dict__[变量名]和 实例.变量名 都可以访问到。

    • 实例的同名变量会隐藏掉类变量,或者说是覆盖了这个类变量。

  • 实例属性的查找顺序

    • 指的是实例使用.d点号来访问属性,会先找自己的__dict__,如果没有,然后通过属性__class__找到自己的类,再去类的__dict__ 中找

    • 注意,如果实例使用__dict__[变量名] 访问变量,将不会按照上面的查找顺序找变量了,这是指明使用字典的key查找,不是属性查找。

    • 一般来说,类变量可使用全大写来命名。
  • 类方法和静态方法

  • 类方法

    • 在类定义中,使用@classmethod装饰器修饰的方法。

    • 必须至少有一个参数,且第一个参数留给了clscls指代调用者即类对象自身。

    • cls这个标识符可以是任意合法名称,但是为了易读, 不要修改。

    • 通过cls可以直接操作类的属性。

  • 静态方法

    • 在类定义中,使用@staticmethod装饰器修饰的方法。

    • 调用时,不会隐式的传入参数。

    • 静态方法,只是表明这个方法属于这个名词空间。函数归在一起,方便组织管理。

引用块内容

  • 类几乎可以调用所有内部定义的方法,但是调用不带self的普通方法时会报错,原因是第一参数必须是类的实例。

  • 实例也几乎可以调用所有的方法。

  • 类除了普通方法都可以调用,普通方法需要对象的实例作为第一参数。

  • 实例可以调用所有类中定义的方法(包括类方法、静态方法),普通方法传入实例自身,静态方法和类方法需要找到实例的类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值