10、类

1、静态字段和普通字段

class Foo:
    #静态字段,保存在类的内存
    cc='1234'
    def __init__(self):
    #动态字段(普通字段),保存在对象中
        self.name = 'alex'
    def show(self):
        print(self.name)

'''
如果普通字段是一个固定的值,像 country = ‘china’一样,每个类中都会有
造成内存浪费,所有将有固定值得普通字段改成静态字段
静态字段在加载代码的时候创建,普通字段在创建实例的时候创建

'''
class province():
    def __init__(self,name):
        self.name = name
        country = 'china'
hn= province('henan')
hb = province('hebei')
'''
普通字段只能用对象访问
静态字段用类访问(万不得已的时候用对象访问)
'''
class province():
    country = 'china'
    #普通方法,由对象去调用执行(方法属于类)
    def __init__(self,name):
        self.name = name

hn= province('henan')
print(province.country)
print(hn.country)

 

2、静态方法,类方法

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'''
普通方法:至少一个self          对象执行
静态方法:任意参数,没有self    类执行(对象也可以执行)
类方法:至少一个cls           类执行(对象也可以执行)
'''
'''静态方法'''
class province():
    country = 'china'

    '''普通方法,由对象去调用执行(方法属于类)'''
    def __init__(self, name):
        self.name = name

    def show(self):
        print(self.name)

    '''
    静态方法,通过类调用,和静态字段相似,在不创建对象的时候可以调用
    相当于python的函数,写在类里面的原因是因为和类相关,如果和类都没有关系
    完全可以单独写一个函数
    '''
    @staticmethod
    def f1(arg1,arg2):
        print(arg1,arg2)

    '''
    类方法,必须有的一个参数是cls,类方法是静态方法的一种特殊情况,和静态方法对比来说
    类方法会自动传给类方法一个类名,而静态方法不会传递
    参数cls:这个类的类名
    '''
    @classmethod
    def f2(cls):
        print(cls)


province.f1('a','b')




class province():
    def __init__(self,all_count):
        self.all_count = all_count

    '''
    属性:调用的时候不用加()
    此时,只能取值,不能传值,如果想要传值,则要重新写一个名字相同的方法
    然后加一个装饰器,@函数名.setter
    如果想要删除,加一个装饰器  @函数名.deleter
    综合以上可以用这样的形式:
    def f1():
        pass
    def f2():
        pass
    def f3():
        pass
    foo = property(fget = f1, fset = f2, fdel = f3)    在类外面,这样调用:
    p.foo           ==> fget=all_pager()
    p.foo = '100'   ==> fset=all_pager()
    del p.foo       ==> fdel=all_pager()
    '''
    @property
    def all_pager(self):
        print(self.all_count)

    @all_pager.setter
    def all_pager(self,value):
        print(value)

    @all_pager.deleter
    def all_pager(self):
        print('del all_pager')

p = province(100)
# p.all_count()
p.all_pager
p.all_pager = 10
del p.all_pager                 #关联方式,这个代码会执行

 

3、私有字段

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

class foo:
    '''私有静态字段
    和私有字段一样,只能在类内进行访问
    '''
    __cc = '123'
    def __init__(self,name,age):
        '''共有字段'''
        self.name=name
        '''私有字段,只能在本类内使用,继承也不行'''
        self__age = age

obj = foo('name',23)
print(obj.name)
'''
print(obj.age)
由于age是私有字段,所有在类外访问的时候会异常,
AttributeError: 'foo' object has no attribute 'age'''

  

posted @ 2016-07-02 11:53  马业胜  阅读(159)  评论(0编辑  收藏  举报