class 及使用方法

类变量

  类变量是类的属性,此属性属于类,不属于此类的实例

 

  作用:

    通常用来存储该类创建的对象的共有属性

  说明:

    类变量可以通过该类直接访问

    类变量可以通过类的实例直接访问

    类变量可以通过此类的对象的__class__属性间接访问

  示例见:

    class_variable.py

 

类的文档字符串

  类内第一个没有赋值给任何变量的字符串为类的文档字符串

  类的文档字符串可以用类的 __doc__属性访问

 

  class Dog:

      '''这是一种小动物'''

 

  >>> help(Dog)  # 查看文档字符串

  print(Dog.__doc__)  # 类的__doc__属性用来绑定文档字符串

 

 

类的 __slots__ 列表

  作用:

    限定一个类创建的实例只能有固定的属性(实例变量)

    不允许对象添加列表以外的属性(实例变量)

    防止用户因错写属性的名称而发生程序错误

  说明:

    1. __slots__列表绑定一个字符串列表

    2. 含有__slots__列表的类所创建 的实例对象没有__dict__属性,即此实例不用字典来存储对象的属性(实例变量)

 

  示例见:

    slots.py

 

 

 

 

 

 

类方法 @classmethod

  类方法是用于描述类的行为的方法,类方法属于类,不属于类的实例

 

  说明:

    类方法需要使用@classmethod装饰器定义

    类方法至少有一个形参,第一个形参用于绑定类,约定写为'cls'

    类和该类的实例都可以调用类方法

    类方法不能访问此类创建的实例的属性

  示例见:

    class_method.py

 

静态方法 @staticmethod

  静态方法是定义在类内部的函数,此函数的作用域是类的内部

 

  说明:

    静态方法需要使用 @staticmethod装饰器定义

    静态方法与普通函数定义相同,不需要传入self实例参数和cls参数

    静态方法只能凭借该类或类创建的实例调用

    静态方法不能访问类变量和实例变量(属性)

  示例见:

    static_method.py

 

实例方法, 类方法, 静态方法, 函数 小结

  不想访问 类内 和 实例内 的变量,用静态方法

  只想访问类内变量,不想访问实例变量,用类方法

  即要访问内变量,也想访问实例变量用实例方法

  函数与静态方法相同,只是静态方式的作用域定义在类内

 

 

练习:

  用类来描述一个学生的信息(可以修改之前写的Student类)

    class Student:

         .... 此处自己实现

 

    学生信息有:

       姓名, 年龄, 成绩

 

    将一些学生的对象存于列表中,可以任意添加和删除学生信息

      1) 打印出学生的个数

      2) 打印出所有学生的平均成绩

      3) 打印出所有学生的平均年龄

 

 

继承 inheritance / 派生 derived

  什么继承/派生

    继承是指从已有的类中派生出新的类,新类具有原类的行为,并能扩展新的行为

    派生类就是从一个已有类中衍生成新类,在新类上可以添加新的属性和行为

  作用:

    1.用继承派生机制,可以将一些共有功能加在基类中,实现代码的共享

    2.在不改变基类的代码的基础上改变原有的功能

  名语:

    基类(base class) /超类(super class)/ 父类(father class)

    派生类(derived class) / 子类(child class)

 

 

单继承:

  语法:

    class 类名(基类名):

       语句块

  说明:

    单继承是指由一个基类衍生出新的类

  示例见:

    inherit.py

 

 

继承说明:

  python3 任何类都直接或间接的继承自object类

  object 类是一切类的超类

 

类的__base__属性

  __base__属性用来记录此类的基类

 

python内建的类详见:

   >>> help(__builtins__)

 

覆盖 override

  覆盖是指在有继承关系的类中,子类中实现了与基类同名的方法,在子类的实例调用该方法时,实际调用的是子类中的覆盖版本,这种现象叫做覆盖

 

  示例见:

    override.py

 

 

 

子类对象显式调用基类(被覆盖)方法的方式:

  基类名.方法名(实例, 实际调用传参)

 

 

super 函数

  super(cls, obj) 返回绑定超类的实例(要求obj必须是cls类型的实例)

  super()  返回绑定超类的实例,等同于: super(__class__, 实例方法的第一个参数), 必须在方法内调用

 

  作用:

    借助super() 返回的实例间接调用其父类的覆盖方法

 

 

 

显式调用基类的初始化方法

  当子类中实现了 __init__ 方法,基类的构造方法并不会被调用

  def __init__(self, ...)

 

  示例见:

    super_init.py

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值