基于python的数据结构与算法-----------python 类

类定义

  • 在一个类里,通常都会定义一个名为__init__的方法(前后都是两个下划线符号),称为初始化方法,其工作是构造本类的新对象。创建实例对象采用函数调用的描述形式,以类名作为函数名,这时系统将建立一个该类的新对象,并自动对这个对象执行__init__方法。
  • 类里的其他实例方法也以self作为第一个参数,对它们的调用需要从本类的实例出发,用圆点形式描述。
  • 在一个类的定义里,由下划线_开头的属性名(和函数名)都当做内部使用的名字==private 变量
  • 在类定义里以两个下划线开头(但不以两个下划线结尾)的名字做了特殊处理,使得在类定义之外不能直接用这个名字访问。在类之外采用属性访问方式直接写这个名字将无法找到它,python解释器会对类定义具有这种形式的名字做统一的改名。
  • python 可定义非实例方法,称为静态方法(与实例方法不同),描述时需要在函数定义的头部行之前加修饰符@staticmethod。静态方法的参数表中不应该有self参数,在其他方妙没有任何限制。
  • python为所有算术运算符规定了特殊方法名,python中的所有特殊的名字都以两个下划线开始,并以两个下划线结束。
  • 如果实例化的类里没有定义初始化函数,实例化创建的是该类的一个空对象,其中没有数据属性。
  • 实例化对象初始化时希望在创建类的实例对象时自动完成适当的初始化。python类中具有特殊名字__init__的方法自动完成初始化工作。__init__方法的第一个参数总表示当前正在创建的对象。方法体中可以通过属性赋值的方式为该对象定义属性并设定初始值。
  • 在执行了一个类定义,从而创建了相应的类对象之后,还可以通过属性赋值的方式为这个类(对象)增加新属性。不仅可以为其增加数据属性,也可以增加函数属性。注意新属性不能与已有函数属性同名,否则会覆盖同名的属性。
  • 如果需要在一个方法函数里调用同一个类里的其他方法函数,就需要明确地通过函数的第一个参数(self),以属性描述的方式写方法调用。
  • 在类里面的函数,也可以访问全局名字空间里的变量和函数,必要时也可以写global或nonlocal声明。
  • python提供了一个内置函数isinstance,专门永不检查类和对象的关系,表达式isinstance(obj,cls)检查对象Obj是否为类cls的实例。
  • 类定义里,定义形式在def行前加修饰符@classmethod,类方法。这种方法必须有一个表示其调用类的参数,习惯用cls作为参数名,还可以有人以多个其他参数。在类方法执行时,调用它的类将自动约束到方法的cls参数,可以通过这个参数访问该类的其他属性。通常用类方法实现与本类的所有对象有关的操作。
  • python内置函数issubclass检查两个类是否具有继承关系,包括直接的或间接的继承关系。
  • 派生类常需要重新定义__init__函数,完成该类实例的初始化。常见的情况是要求派生类的对象可以作为基类的对象,用在要求基类对象的环境中。使用这种对象时,可能调用派生类自己定义的方法,也可能调用由基类继承的方法。在这种派生类的实例对象里就应该包含基类实例的所有数据属性,在创建派生类的对象时,就需要对基类对象的所有数据属性进行初始化。完成这一工作的常见方式是直接调用基类的__init__方法。
  • super()是python的一个内置函数,把它用在派生类的方法定义里,就是要求从这个类的直接基类开始做属性检索(而不是从这个类本身开始查找)。
  • 为了语法的完整,可以在函数定义里只写一个"pass"
  • try   ...   except...异常
  • staticmethod 没有任何必选参数,而 classmethod 第一个参数永远是 cls, instancemethod 第一个参数永远是 self。
  • 如果类中定义了名字为__init__的初始化函数,生成实例对象时就会自动调用它;如果没定义这个函数,生成的将是一个空对象。
  • 通常用初始化函数为实例对象建立数据属性,设置实例对象的初始化状态。

猜你喜欢

转载自blog.csdn.net/eason_oracle/article/details/80305976