对于一个python的class而言,拥有类属性,类对象,实例对象,实例属性等概念。
class A:
name="A" #类属性,为类所共有,有点类似c++中的静态数据成员
def printName(self): #定义了一个方法
print(self.name)
类支持两种做法:1.引用,即直接使用类对象和类属性。2.实例化,即产生一个对象的实例。比如:
A类定义完成之后就产生了一个全局的类对象,可以通过类对象来访问类中的属性和方法了。当通过A.name(至于为什么可以直接这样访问属性后面再解释,这里只要理解类对象这个概念就行了)来访问时,A.name中的A称为类对象,这点和C++中的有所不同。当然还可以进行实例化操作,a=A( ),这样就产生了一个A的实例对象,此时也可以通过实例对象a来访问属性或者方法了(a.name).
在数据成员前面加__意味着这是私有的。
同时,python中拥有一些内置的方法,比如:构造方法init(self,….)在生成对象时调用,可以用来进行一些初始化操作,不需要显示去调用,系统会默认去执行。构造方法支持重载,如果用户自己没有重新定义构造方法,系统就自动执行默认的构造方法。
析构方法del(self)在释放对象时调用,支持重载,可以在里面进行一些释放资源的操作,不需要显示调用。
还有其他的一些内置方法:
比如 cmp( ), len( )等,具体的用法可以参考这篇博文:
http://blog.csdn.net/foreveyking/article/details/78077061
对于类属性和实例属性,如果在类方法中引用某个属性,该属性必定是类属性,而如果在实例方法中引用某个属性(不作更改),并且存在同名的类属性,此时若实例对象有该名称的实例属性,则实例属性会屏蔽类属性,即引用的是实例属性,若实例对象没有该名称的实例属性,则引用的是类属性;如果在实例方法更改某个属性,并且存在同名的类属性,此时若实例对象有该名称的实例属性,则修改的是实例属性,若实例对象没有该名称的实例属性,则会创建一个同名称的实例属性。想要修改类属性,如果在类外,可以通过类对象修改,如果在类里面,只有在类方法中进行修改。
从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用。