第十四天python3 面向对象

面向对象代码执行过程:

   

  1、首先在内存中定义一个Horse的类对象,在这个类对象中捆绑类一个__init__的属性,生成类一个归类对象Horse管理的函数;
  2、对Horse这个类做实例化操作,baima/heima=Horse('baima/heima','18'),先算等号右边,Horse('baima','18')创建了一个实例,执行init函数,并将值赋值给baima,与创建的实例建立关系;
  3、baima/heima再去调用showname方法,showname方法再调用实例变量和类变量打印结果;

面向对象
  什么是面向对象
    一切皆对象;
    对象是数据和操作的封装;
    对象之间相互独立,但也可以相互作用;
  三要素:
    封装:
      数据与方法的集合;
      提供一个或者多个接口来访问;隐藏数据,使用者不需要知道具体是怎么运作的;
    继承:多继承,少修改,继承来的就不用自己写了;
    多态:动态绑定;
定义:
  使用class关键字
  使用大驼峰命名;首字母大写;
  类定义完成之后,就产生类一个类对象;绑定到标示符ClassName上;
    class ClassName:
      pass
类对象以及属性
  类对象:类的定义就会生成一个对象;
  类属性:类定义中的变量和方法都是类的属性
  类变量:类中定义的变量,这个类普遍具有的特性;
实例化
  baima = Horse('baima','18')
  heima = Horse('heima','19')
  实例化就是真正创建一个该类的对象,baima和heima就是Horse类的实例;每次实例化后获得的实例,都是不同的实例,即使使用同样的参数实例化,得到的也是不一样的对象;python类实例化后,会自动调用__init__方法;这个方法的第一个参数必须留给self,其他参数随意;
__init__方法
  ClassName实际上调用的是__init__(self)方法,可以不定义,如果没有定义会在实例化后隐式调用;
  作用:对实例进行初始化;
    class ClassName:
      def __init__(self):
        print('init')
    print(ClassName) #未调用__init__
    print(ClassName()) #临时创建一个对象,调用__init__
    a = ClassName() #创建一个对象,并赋值给a,调用__init__;
  初始化函数可以有多个参数,但是第一个位置必须留给self,self指代当前实例本身;
  init方法被调用的时候,实例就已经存在了;self.name=表示给实例添加了个属性(因为self是一个实例,所以.name是实例的属性;)
  注意:__init__方法不能有返回值,只能是None;

  

实例对象instance
  类实例化后一定会获得一个对象,就是实例对象;
  Horse是定义一个类,Horse()创建一个实例,并实例化,baima=Horse()将实例化的值赋给白马,baima就是Horse类的实例对象;
  __init__方法的第一个参数self就是指代某一个实例,这个self就是上述例子中的baima,python会把方法的调用者作为第一参数self的实参传入;
  类实例化后,得到一个实例对象,实例对象会绑定方法,调用方法时采用baima.showname()的方式;
  self.name就是baima对象的name,name是保存在了baima对象上,而不是Horse类上,所以称为实例变量;
实例变量和类变量
  实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类的所有实例共享的属性和方法;
  特殊属性    含义
  __name__  对象名
  __class__  对象的类型
  __dict__  对象的属性的字典
  __qualname__  类的限定名
  注意:python中每一种对象都拥有不同的属性;函数、类都是对象,类的实例也是对象;

  

    

  上例中,可以看到类属性保存在类的__dict__中,实例属性保存在实例的__dict__中,如果从实例访问类的属性,就需要借助__class__找到所属的类;

原文地址:https://www.cnblogs.com/zhangzhide/p/14079090.html