zoukankan      html  css  js  c++  java
  • python>基础>005>类的三大成员:方法+属性+字段

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

    一、方法

    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
  • 相关阅读:
    C/C++ 子集生成算法整理
    C++ 求枚举排列的两种方法
    uva1600 Patrol Robot(不同的BFS最短路)
    C++ 已知二叉树两种遍历序列,构建二叉树
    优先队列 C++
    离散化方法
    基本模运算
    C++ 快速幂运算
    病毒通过445端口
    最新勒索软件WannaCrypt病毒感染前后应对措施
  • 原文地址:https://www.cnblogs.com/mangguoxiansheng/p/6020573.html
Copyright © 2011-2022 走看看