Python的类

在Python类中定义的方法通常有三种:实例方法,类方法,静态方法

这三者之间的区别是:

实例方法一般都已self作为第一个参数,必须和具体的对象实例进行绑定才可以访问。

类方法以cls作为第一个参数,cls表示类本身,定义时使用@classmethod, 那么通过cls引用的必须是类对象的属性和方法:

静态方法不需要默认的任何参数,和一般的普通函数类似,定义的时候用@staticmethod,静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用。

实例方法的第一个参数是实例对象self,那么通过self引用的可以是类属性,也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性的优先级更高。

 

访问属性

使用(.)来访问对象的属性,使用如下类的名称访问类变量:

emp1.displayEmployee()

可以添加,删除,修改类的属性,如下所示:

emp1.age=7  #添加一个‘age’属性

emp1.age=8  #修改‘age’属性

del emp1.age   #删除‘age’属性

 

getattr(obj, name[, default])  :访问对象的属性

hasattr(obj,name)  :检查是否存在一个属性

setattr(obj,name,value)  :设置一个属性,如果属性不存在就创建一个新的属性

delattr(obj,name)  :删除属性

 

python的内置属性

__dict__:  类的属性(包含一个字典,由类的数据属性组成)

__doc__:  类的文档字符串

__name__:  类名

__module__:  类定义所在的模块(类的全名是‘__main__.classname’, 如果类似于一个导入模块mymod,那么classname.__main__等于mymod)

__bases__:  类的所有父类构成元素(包含了以下由所有父类构成的元祖)

如果自己定义类的内置属性,也应该采用类似这样的__格式,左右两边都有两个_

 

python的对象销毁(垃圾回收)

在Python内部记录着所有使用中的对象各有多少引用,一个内部跟踪变量,称为一个引用计数器。

当对象被创建时,就创建了一个引用计数,当这个对象不在需要时,也就是说这个对象的引用计数变为了0,它可以被垃圾回收,但是回收不是立即的,由解释器在适当的时机,将垃圾对象占用的内存空间回收。

 

类的继承

面向对象编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是继承机制。

继承的语法

class 派生类名 (基类名):    ##基类名写在括号里面,基本类是在类定义的时候,在元祖之中指明的。

在Python中

 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要在派生类的构造中亲自专门调用。

  2.在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。(区别于在类中调用普通函数时并不需要带上self参数)

  3.Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始在基类中逐个查找(先在本类中查找调用的方法,找不到采取基类中找)

  4.如果在继承元祖中列了一个以上的类,那么它就被称作“多重继承”。

语法:

派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:

class SubClassName (ParentClass1[, ParentClass2,....]):

  'Optional class documentation string'

  class_suite

可以使用issubclass()或者isinstance()方法来检测

issubclass()  ##布尔函数,判断一个类是另一个类的子类或者子孙类,语法: issubclass(sub,sup)

isinstance(obj,class)  ##布尔函数如果obj是class类的实例对象或者是一个class子类的实例对象则返回true。

方法重写:

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

 

posted on 2018-05-18 06:26  心灯在林  阅读(170)  评论(0编辑  收藏  举报

导航