---恢复内容开始---

一、方法

python的方法中分为三种方法:

静态方法

动态方法(普通方法)

类方法

其中常用的方法为:静态方法和动态方法

class MyClass:
    def __init__(self, name):
        self.name = name
 
    # 动态方法
    def show(self):
        return self.name
 
    # 静态方法
    @staticmethod
    def detail(name):
        print '%s is good person.' %name
 
    # 类方法
    @classmethod
    def show_detail(cls):
        cls.detail('Kevin')
 
if __name__ == "__main__":
    object = MyClass("Jack")
    p_name = object.show()
    MyClass.detail(p_name)
    MyClass.show_detail()

方法调用遵循的规则:

1.动态方法由对象调用;

2.静态方法由类调用;

3.类方法,属于静态方法的一种,通过类来调用,执行的时候会自动将类名传递进去,因此要有一个默认的接收参数.

说明:

什么是对象?对类进行实例化后即为对象,如上述代码,object = MyClass("Jack"),对MyClass这个类进行实例化后,产生了object这个对象。

什么是类?通过class定义出来的,如上述代码,MyClass即为定义出来的类。

什么是动态方法?动态方法,我们常用的通过def定义出来的方法,即为动态方法(也叫做普通方法),注意动态方法前面是没有staticmethod这个装饰器装饰的。

什么是静态方法?静态方法,与动态方法的最大区别是,有staticmethod这个装饰器对方法进行装饰,可以理解为动态方法加个staticmethodz这个装饰器进行装饰后,即为静态方法。

二、字段

字段的分类:

动态字段;

静态字段;

私有字段;

class MyClass:
    # 静态字段,属于类,多个对象共用一个静态字段
    leader = "abuve"
 
    def __init__(self):
        # 动态字段,属于对象,也可以叫普通的字段,每个对象都会有自己独有的动态字段
        self.name = "kevin"  

字段的调用访问遵循的规则:

1.静态字段,属于类,通过类对静态字段进行调用访问;

2.动态字段,属于方法,通过方法对动态字段进行调用访问。

class Company:
    company_name = "Center"

    def __init__(self, dept, leader):
        self.dept = dept
        self.leader = leader

    def ...

if __name__ == "__main__"
    it_dept = Company("IT", "Abuve")
    hr_dept = Company("HR", "Kevin")
对于上述代码,我们通过下面的方式访问其中的字段数据:
print it_dept.dept
print hr_dept.leader
print Company.company_name

3.私有字段,私有字段,类不能直接对私有字段进行调用访问,而是通过调用私有字段对应的方法的方式来调用访问私有字段。

class MyClass:
    def __init__(self, name):
        self.__name = name
 
    def show(self):
        print self.__name

if __name__ == "__main__":
    object = MyClass("Abuve")
    # 通过对象无法访问到私有字段
    print object.__name
    # 私有字段通过类的内部方法访问
    object.show()
    # 通过类名前加入下划线的方式同样可以访问到
    print object._MyClass__name

 

三、属性

class PageSet:
    def __init__(self, count, page_size):
        self.count = count
        self.page_size = page_size
 
    # 通过装饰器将page_num变为属性,对象调用时不需要再加括号
    @property
    def page_num(self):
        page_count, remainder  = divmod(self.count, self.page_size)
        if remainder == 0:
            return page_count
        else:
           return page_count + 1
 
if __name__ == "__main__":
    # 传入条目总数,以及单页size大小
    page_tools = PageSet(108, 10)
    # 像访问字段一样执行了page_num方法
    print page_tools.page_num

上面的代码实现了一个分页设置,我们通过装饰器property将page_num方法变为属性,那么该方法在被对象调用时,就像访问字段一样,不需要再加括号了。此时我们只实现了通过字段的方式来访问方法

我们对属性可以进行:删除和赋值操作

class PageSet:
    def __init__(self, count, page_size):
        self.count = count
        self.page_size = page_size
 
    @property
    def page_num(self):
        page_count, remainder  = divmod(self.count, self.page_size)
        if remainder == 0:
            return page_count
        else:
            return page_count + 1
 
    @page_num.setter
    def page_num(self, value):
        print value
        print 'This is set function.'
 
    @page_num.deleter
    def page_num(self):
        print 'This is delete function.'
 
if __name__ == "__main__":
    page_tools = PageSet(108, 10)
    # 调用property修饰属性
    page_tools.page_num
    # 调用page_num.setter修饰属性
    page_tools.page_num = 12
    # 调用page_num.deleter修饰属性
    del page_tools.page_num
posted on 2016-11-01 18:38  mangguo  阅读(822)  评论(0编辑  收藏  举报