Python脚本语言开发

面向对象

属性

  1. 成员属性
    1. 事物具有的特征,通常表现为静态的数据,包括类属性和实例属性
  2. 类属性
    1. 某个类的所有实例化对象所共有的属性,定义在类内部、方法外部
    2. 通过类名或对象名均可访问。如果是通过对象名访问,程序会先看有无同名的实例属性,如果没有,则引用类属性。
    3. 类属性的更新,只能通过类名引用重新赋值。
  3. 实例属性
    1. 实例对象自己的属性,即实例属性属于特定的实例。

注意:

  1. 在Python中,通过在类的外部使用赋值语句:“对象名.属性名=值”即可添加实例属性,但是不推荐使用!所有的实例属性应该尽量封装在类的内部。
  2. 在类的外部给对象增加属性,该语句的位置会影响代码的正常运行,需在调用类方法之前设置属性,否则会报错。
  3. 实例属性应该在类的内部用初始化方法“init”封装。Python在使用类创建对象时,__init__方法会自动被调用。

方法

  1. 构造方法

    1. init(self, ……) 是Python中的一种特殊方法,固定格式,用于初始化实例的属性,通常是类定义中的第一个成员方法。
  2. 析构方法

    1. del(self)是Python中的另一种特殊方法,固定格式,当删除一个对象来释放类所占用的资源时,系统会自动调用析构方法
  3. 实例方法

    1. 实例方法的定义格式与函数大致相同,主要区别在于实例方法必须显式地以实例对象作为第一个参数,习惯上用self表示。

      1. def <方法名>(self, <参数列表>):

        <方法体>

    2. 当某个实例对象调用方法时,Python解释器会自动把这个对象隐式地传给self,开发者只需传递后面的参数。在类定义之外,实例方法只能通过实例对象去调用

      1. <对象名>.<方法名>(<参数列表>)

  4. 类方法

    1. 类方法用装饰器@classmethod来标识,且必须显式地以类对象作为第一个参数,习惯上用cls表示。

      1. @classmethod

        def <类方法名>(cls, <参数列表>):

        <方法体>

    2. 在类方法内部可以直接访问类属性或者调用其它类方法。类方法不对特定实例进行操作,如果在类方法中访问实例属性,会导致错误。

  5. 静态方法

    1. 静态方法需要使用装饰器@staticmethod来标识。

    2. 静态方法没有必须存在的参数要求。

    3. 调用静态方法既可以通过类对象,也可以通过实例对象,

      可视具体情况而定,即:调用静态方法不需要实例化。

      1. @staticmethod

        def <静态方法名>():

        <方法体>

不同种类方法的对比

  1. 定义形式上
    1. 类方法和静态方法需要用装饰器标识,而实例方法不需要;
    2. 实例方法必须有self参数,类方法必须有cls参数,而静态方法不需要。
  2. 调用方式上
    1. 实例方法通过实例对象调用,不能通过类对象直接调用;
    2. 类方法和静态方法可以通过类对象或者实例对象调用,建议通过类对象调用
  3. 应用场景上
    1. 实例方法针对实例对象进行操作,应用场合最多;
    2. 类方法针对类对象进行操作,使用时无需创建实例对象;
    3. 实例方法和类方法可以改变实例对象或类对象的状态,而静态方法不可以;类方法中不能访问实例属性。
    4. 如果要修改实例属性的值,就使用实例方法;如果要修改类属性的值,就使用类方法;如果是辅助功能,如打印菜单或用于测试等,可考虑静态方法,此时可以在无实例化的前提下使用。