类的定义与使用
创建对象
对象名=类名()
添加属性
对象名.新的属性名=值
私有成员与公有成员以及数据成员
如果成员名以两个下划线(__)开头,则表示是私有成员。
由于python 没有对其提供严格的访问保护机制,私有成员在类的外部是不能直接访问的,只能在类的内部进行访问和操作或者在类外部通过调用对象的公有成员方法来访问。
python中,可以通过"对象名._类名__xxx"这种特殊方法来访问私有成员。这种方法不推荐使用,会破坏类的封装性。
数据成员
可以把数据成员分为两类:
(1)属于对象的数据成员:主要指在构建函数__init__()中定义,定义和使用时必须以self作为前缀(必须),在同一类的不同对象(实例)之前的数据成员互不影响。
(2)属于类的数据成员:它们是类所有对象共享的,不属于任何一个对象,这类数据成员不在任何一个成员方法的定义中。
注:属于对象的数据成员,可以称为实例属性;属于类的数据成员,即为类属性。
在Python程序设计中,两者的区别在于主程序中或类的外部,对象数据成员属于实例(对象),只能通过对象名访问;类数据成员属于类,可以通过类名或对象名访问。另外,在pyhton中可以动态的给类和对象增加成员。
方法
Python类中,定义的方法可以分为四大类:公有方法、私有方法、静态方法和类方法。
self的使用
类的所有实例方法都有且至少有一个名为self的参数,同时也是方法的第一形参,self的字面意思是自己,表示的是对象自身。可以把它当作C++里面的this指针进行理解。
虽然在类的实例方法中访问实例属性时需要以self为前缀,但在外部通过对象名调用对象方法时并不需要传递这个参数。
类方法
类方法可以使用修饰器@classmethod来标识
其语法格式如下:
class 类名:
@classmethod
def 类方法名(cls):
方法体
类方法中的第一个参数为cls,它代表定义方法的类,即可通过cls访问类的属性。要想调用类的方法,即可以通过对象名调用类方法,又可以通过类名调用类方法,这两种方法没有没有任何区别。
class Student(object):
#类属性
num=0
#类方法
@classmethod
def setNum(cls,newNum):
cls.num=newNum
Student.setNum(20180901)
print(Student.num)
静态方法
静态方法可以使用修饰器@staticmethod标识,其语法格式如下:
class 类名:
@staticmethod
def 静态方法名():
方法体
和前面所学的实例方法不同,静态方法的参数列表中没有任何参数。没有self参数,这一点导致其无法访问类的实例属性;也没有cls参数,导致它也无法访问类属性。**结论:静态方法和定义它的类没有直接关系,只是起到类似于函数的作用。**想要使用静态方法,可以通过两种方式:一是可以通过对象名调用;二是可以通过类名调用。两者没有任何区别。