系统学习编程笔记(二十五)

• 完成 Python 教程

8   面向对象编程

  • 面向对象编程----Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
  • 面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
  • 给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。
  • 类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
  • 创建实例的时候,可以定义一个特殊的__init__方法,__init__方法的第一个参数永远是self,表示创建的实例本身,创建实例的时候,self参数不需要传,python解释器自己会把实例变量传进去。
  • 与普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。
  • 封装的一个好处是把数据和逻辑封装起来,调用很容易,但却不用知道内部实现的细节。封装的另一个好处是可以给student类增加新的方法。
  • 方法就是与实例绑定的函数,与普通函数不同,方法可以直接访问实例的数据。
  • 与静态语言不同,python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同。
  • 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__
  • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的类称为基类、父类或超类(Base class,Super class)。
  • 继承有什么好处?最大的好处是子类获得了父类的全部功能。
  • 继承的第二个好处就是可以对父类的方法进行覆盖,从而实现多态。
  • 多态的真正威力在于调用方只管调用,不管细节。这就是著名的“开闭”原则。
  • 对于静态语言(如JAVA)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了。
  • 动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。
  • 我们来判断对象类型,使用type()函数。
  • 对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。
  • 总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”。
  • 如果要获得一个对象的所有属性和方法,可以使用dir()函数
  • 仅仅把属性和方法列出来是不够的,配合getattr()setattr()以及hasattr(),我们可以直接操作一个对象的状态
  • 通过内置的一系列函数,我们可以对任意一个Python对象进行剖析,拿到其内部的数据。要注意的是,只有在不知道对象信息的时候,我们才会去获取对象信息。
  • 如果类本身需要绑定一个属性,可以直接在class中定义属性,这种属性就是类属性,归类所有。
  • 在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值