本篇将介绍Python 类的成员、类成员修饰符、类的特殊成员。
类的成员可以分为三大类:字段、方法、属性
1、字段:
也可理解为变量,分为:
普通字段:保存在对象中,访问时通过“对象.字段名”访问。
静态字段:保存在类中,访问时通过“类.字段名”访问。
例子:
class Person(object): #继承object类说明是一个新式类 country = 'China' #静态字段 def __init__(self,name): print 'Person build self.name' self.name = name #普通字段 p1 = Person('lily') print p1.name #对象.字段访问普通字段 print Person.country #类.字段访问静态字段 #执行结果: Person build self.name lily China
2、方法:
也可理解为函数,分为:
普通方法:由对象调用,至少有一个self参数,必须先创建对象才能执行,执行方式为:对象.方法
静态方法:由类调用,参数任意,定义方式是在方法上加一个staticmethod装饰器,其实就是通过面向对象的方式来定义函数。执行方式为:类.方法
类方法:由类调用,至少有一个cls参数,定义方式是在方法上加一个classmethod装饰器。执行方式为:类.方法
例子:
class Person(object): country = 'China' def __init__(self,name): print 'Person build self.name' self.name = name def say(self): #定义普通方法,至少有一个self参数 print 'Normal say: %s'%self.name @staticmethod def static_say(name): #定义静态方法,参数任意 print 'Static say: %s'%name @classmethod def class_say(cls,name): #定义类方法,至少有一个cls参数 print 'Class say: %s'%name #调用普通方法 p1 = Person('Lily') p1.say() #调用静态方法 Person.static_say('Lucy') #调用类方法 Person.class_say('Lilei') #执行结果 Person build self.name Normal say: Lily Static say: Lucy Class say: Lilei
3、属性:
作用就是把普通方法伪装成字段,定义方式为在普通方法上加一个property装饰器,仅有一个self参数,调用时无须括号。
例子:
class Person(object): country = 'China' def __init__(self,name): print 'Person build self.name' self.name = name def say1(self): #普通方法 print 'Say1: %s'%self.name @property def say2(self): #定义属性 return 'Say2: %s'%self.name p1 = Person('Lily') p1.say1() #普通方法调用方式 ret = p1.say2 #属性调用方式 print ret #运行结果: Person build self.name Say1: Lily Say2: Lily
类成员修饰符
对每一个类的成员而言都有两种形式:公有成员、私有成员
公有成员:任何地方都能访问
私有成员:只有在类的内部才能访问,定义方式为命名时,前两个字符为下划线,如 "__test"
例子:
class Person(object): country = 'China' #静态字段,属于公有成员 __planet = 'Earth' #静态字段,属于私有成员 def __init__(self,name): print 'Person build self.name' self.name = name def say(self): print 'The planet is %s'%Person.__planet #在类的内部访问私有静态字段 p1 = Person('Nothing') p1.say() print p1.country #访问公有静态字段 print p1.__planet #访问私有静态字段 #执行结果: Person build self.name The planet is Earth #在类的内部可以访问 print p1.__planet China #外部可以访问公有静态字段 AttributeError: 'Person' object has no attribute '__planet' #外部无法访问私有静态字段
类的特殊成员(详细用法例子后期补上):
__doc__ 表示类的描述信息
__module__ 表示当前操作的对象在那个模块
__class__ 表示当前操作的对象的类是什么
__init__ 构造方法,通过类创建对象时,自动触发执行
__call__ 对象后面加括号,触发执行。
__dict__ 类或对象中的所有成员
__str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。