start
py3
类的三大成员: 字段(变量) 、属性、方法
一.字段(实例变量和类变量)
例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #!/usr/bin/env python#coding=utf-8classProvince:    ‘‘‘    字段(变量)包括:普通字段(实例变量)和静态字段(类变量),他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,    普通字段(实例变量)属于对象    静态字段(类变量)属于类    ‘‘‘    #静态字段(类变量)    country="中国"    def__init__(self,name):        #普通字段(实例变量)        self.name=name#直接访问普通字段(实例变量)obj=Province("广州")print(obj.name)obj.name="你妹"obj.name2="你妹2"obj.yaobin="自己定义实例变量"print(obj.name)print(obj.name2)print(obj.yaobin)#直接访问静态字段(类变量)print(Province.country)##结果:广州你妹你妹2自己定义实例变量中国 | 
二.属性
①装饰器方式定义属性之新式类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #!/usr/bin/env python#coding=utf-8 ‘‘‘装饰器方式:在类的普通方法上应用@property装饰器‘‘‘ #新式类classanimal(object):    ‘‘‘    新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法    ‘‘‘     def__init__(self, name):        self.name =name        self.num =None       @property    defprice(self):        returnself.num      @price.setter    defprice(self,num):        self.num=num        print("设置num",self.num)      @price.deleter    defprice(self):        print("删除",self.num)        delself.num   dog=animal("随便")  #实例化 ################################################################################ print(dog.price)  # 自动执行 @property 修饰的 price 方法,并获取方法的返回值                  #输出是None dog.price="123456"# 自动执行 @price.setter 修饰的 price 方法,并将  123456 赋值给方法的参数print(dog.price)     #现在是123456了  deldog.price     # 自动执行 @price.deleter 修饰的 price 方法#print(dog.price)  #再打印,是会报错的  ##结果:None设置num 123456123456删除 123456 | 
②装饰器方式定义属性之经典类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/usr/bin/env python#coding=utf-8‘‘‘装饰器方式:在类的普通方法上应用@property装饰器‘‘‘#经典类classGoods:    ‘‘‘    经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法    ‘‘‘    @property    defprice(self):        return"yaobin"obj=Goods()result=obj.price #自动执行 @property 修饰的 price 方法,并获取方法的返回值print(result)#结果:yaobin | 
③静态字段(类变量)方式定义属性
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #!/usr/bin/env python#coding=utf-8‘‘‘创建值为property对象的静态字段(类变量)‘‘‘classFoo(object):    ‘‘‘    当使用静态字段(类变量)的方式创建属性时,经典类和新式类无区别    ‘‘‘    def__init__(self,name):        self.name =name        self.num =None    defget_bar(self):        returnself.num    #必须两个参数    defset_bar(self,num):        self.num=num        print("设置num",self.num)    defdel_bar(self):        print("我要删了num",self.num)        delself.num    BAR=property(get_bar,set_bar,del_bar,‘描述信息‘)obj=Foo("haha")  #实例化#############调用################## # 自动调用第一个参数中定义的方法:get_barprint(obj.BAR)# 自动调用第二个参数中定义的方法:set_bar方法,并将123456当作参数传入obj.BAR=123456print(obj.BAR)# 自动调用第三个参数中定义的方法:del_bar方法delobj.BAR#print(obj.BAR)  #再打印,报错!##结果:None设置num 123456123456我要删了num 123456 | 
三.方法
1.普通方法、2.类方法、3.静态方法
例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #!/usr/bin/env python#coding=utf-8 classFoo:    ‘‘‘    方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。     普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;    类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;    静态方法:由类调用;无默认参数;    ‘‘‘    test="gril"#类变量     def__init__(self,name):        self.name=name     deford_func(self):        """ 定义普通方法,至少有一个self参数 """        print("普通方法%s"%(self.name))      @classmethod    defclass_func(cls):        """ 定义类方法,至少有一个cls参数 """        #print("类方法 %s",self.name)  #不能访问普通字段(实例变量)        print("类方法",Foo.test) #可以访问静态字段(类变量)     @staticmethod    defstatic_func():        """ 定义静态方法 ,无默认参数"""        print("静态方法")   #不能访问类变量(静态字段),也不能访问实例变量(普通字段),和类就一个组织逻辑关系,没什么用  #实例化obj=Foo("yaobin")   #调用普通方法obj.ord_func()  #调用类方法Foo.class_func()  #调用静态方法Foo.static_func()  ##结果:普通方法yaobin类方法 gril静态方法 | 
end
原文:http://www.cnblogs.com/binhy0428/p/5272268.html