• py9_详解 Python 类属性/类方法 以及如何转换类方法和静态方法


    ##################################################

    目录

    活动简介

    Python 类属性和类方法

    类的属性和方法最通俗易懂的解释方式

    Python 类的属性

    两种方式访问类的属性

    Python 公有属性

    Python 私有属性

    Python 内置属性

    Python 类的方法

    Python 公有方法

    Python 私有方法

    Python 类方法

    Python 静态方法

    上述四种方法的总结示例


    ##################################################

    活动简介

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰;一个人摸索学习很难坚持,想组团高效学习;想写博客但无从下手,急需写作干货注入能量;热爱写作,愿意让自己成为更好的人…

    欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程,或者按照自己的理解发布专栏学习作品!

    ##################################################

    Python 类属性和类方法

    ——————————

    类的属性和方法最通俗易懂的解释方式

            类的定义由属性和方法组成

    属性是对数据的封装

    方法则是对类行为的封装

    ——————————

    Python 类的属性

            Python 语言中的属性操作遵循三个规则:

    属性的获取是按照从下到上的顺序来查找属性

    类和实例是两个完全独立的对象

    属性设置是针对实例本身进行的

            属性按使用范围分为公有属性和私有属性

            使用范围取决于属性名称

    %%%%%

    两种方式访问类的属性

            关于访问类的属性有两种方式:

    1. 类.属性
    2. 实例对象.属性

            示例通过类访问:

    1. >>> class Test:
    2. ... a = 1
    3. ... b = "ooxx"
    4. ...
    5. >>> Test.a
    6. 1
    7. >>> Test.b
    8. 'ooxx'
    9. >>> Test.a = 2
    10. >>> Test.b = "xxoo"
    11. >>> Test.a
    12. 2
    13. >>> Test.b
    14. 'xxoo'
    15. >>>

            示例通过单个实例对象访问:

    1. >>> test = Test()
    2. >>> test.a
    3. 2
    4. >>> test.b
    5. 'xxoo'
    6. >>> test.a = 1
    7. >>> test.a
    8. 1
    9. >>> test.b = "ooxx"
    10. >>> test.b
    11. 'ooxx'
    12. >>>

    %%%%%

    Python 公有属性

            公有属性:

    类中和类外调用的属性

            变量默认都是公有属性

    %%%%%

    Python 私有属性

            私有属性:

    不能被类以外的函数调用的属性

            命名以双下划线 __ 开始的成员变量就是私有属性

            可以通过

    instance._ClassName__attribute

    实例._类名__属性

            方式访问

            示例:

    1. Microsoft Windows [版本 6.3.9600]
    2. (c) 2013 Microsoft Corporation。保留所有权利。
    3. C:\Users\byme>python
    4. Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
    5. Type "help", "copyright", "credits" or "license" for more information.
    6. >>> class Test:
    7. ... __name = 10
    8. ...
    9. >>> te = Test()
    10. >>> te._Test__name
    11. 10
    12. >>>

    %%%%%

    Python 内置属性

            内置属性:

    由系统在定义类的时候默认添加的

            命名一般由前后各两个下划线 __ 组成

            例如 __dc__

            内置类属性:

    1. __name__ 类名字
    2. __doc__ 类的文档字符串
    3. __bases__ 所有父类构成的元组
    4. __dict__ 类的属性
    5. __module__ 类定义所在的模块
    6. __class__ 新式类中实例对应的类

            示例:

    1. >>> class Test:
    2. ... __name = 10
    3. ...
    4. >>> Test.__name__
    5. 'Test'
    6. >>> Test.__doc__
    7. >>> Test.__bases__
    8. (<class 'object'>,)
    9. >>> Test.__dict__
    10. mappingproxy({'__module__': '__main__', '_Test__name': 10, '__dict__': '__dict__' of 'Test' objects>, '__weakref__': '__weakref__' of 'Test' objects>, '__doc__': None})
    11. >>> Test.__module__
    12. '__main__'
    13. >>> Test.__class__
    14. <class 'type'>
    15. >>>

            内置实例属性:

    1. __class__ 实例对象所属的类名
    2. __dict__ 实例对象的属性

            示例:

    1. >>> te = Test()
    2. >>> te.__class__
    3. <class '__main__.Test'>
    4. >>> dict.__class__
    5. <class 'type'>
    6. >>>

    ——————————

    Python 类的方法

            类方法也包括公有方法、私有方法、类方法和静态方法

            后两者类似于 C ++ 中的函数重载

            由于 Python 没有这样的功能因此使用了类方法和静态方法

            类方法和静态方法原理上有以下区别:

    1. 静态方法不能使用 self 的方式调用
    2. 静态方法调用时会预先将类中用到的属性和方法进行加载
    3. 而类方法则是随调随用
    4. 因此类方法相比静态方法具有不占资源的优势
    5. 但是类方法速度不及静态方法
    6. 静态方法调用类中的属性时需要使用
    7. 类名.属性
    8. 的格式

    %%%%%

    Python 公有方法

            公有方法:

    不能被类直接调用 需要使用实例化对象调用

            示例公有方法:

    1. def func_1(self):
    2. # 一般的都是公有方法

    %%%%%

    Python 私有方法

            私有方法:

    不能被外部的类和方法调用

            需要在方法的前面加上双下划线 __

            示例私有方法:

    1. def __func_2(self):
    2. # 私有方法前面要加 __

    %%%%%

    Python 类方法

            类方法:

    能被类所调用 也能被对象所调用

            被 classmethod 函数调用或被 @classmethod 装饰器修饰

            示例装饰器修饰类方法:

    1. @classmethod
    2. def fun_3(self):
    3. # 用 @classmethod 声明类方法

            还有一种 就是将函数转换成

            classmethod() 被认为是不符合 Python 规范的

            所以比较推荐在较新的 Python 版本中用 @classmethod 装饰器来定义类方法

            就是将需要转换成类方法的方法转换并返回:

    1. def func_4(self):
    2. # 这是 Test 类中的一个普通函数 func_4
    3. Test.func_4 = classmethod(Test.func_4) # 类.方法 = classmethod(类名.方法名)

    %%%%%

    Python 静态方法

            静态方法:

    相当于全局方法 可以被类直接调用 也可以被所有实例化对象共享

            该方法通过调用 staticmethod 方法或被 @staticmethod 装饰器来声明

            静态方法不需要 self 语句

            示例装饰器修饰静态方法:

    1. @staticmethod
    2. def fun_5():
    3. # 静态方法用 @staticmethod 装饰器修饰声明 不需要加 self

            示例另一种方式 将方法转换成静态方法:

    1. def fun_6():
    2. # 这是一个普通方法 未加 self 参数
    3. Test.func_6 = staticmethod(Test.fun_6) # Test 类中的静态方法 func_6 被 staticmethod() 调用转换成了静态方法返回

    %%%%%

    上述四种方法的总结示例

            没有注释 很简单的都能看得懂:

    1. class Test:
    2. def fun_1(self):
    3. print ( "这是一个公开方法" )
    4. def __func_2(self):
    5. print ( "这是一个私有方法" )
    6. @classmethod
    7. def fun_3(self):
    8. print ( "这是用 @classmethod 装饰器修饰的类方法" )
    9. def func_4(self):
    10. print ( "这是待转换成类方法的的普通函数 func_4" )
    11. func_4 = classmethod(func_4)
    12. @staticmethod
    13. def fun_5():
    14. print ( "这是用 @staticmethod 装饰器修饰的静态方法" )
    15. def fun_6():
    16. print ( "这是待转换成静态方法的的未加 self 参数的普通函数 func_4" )
    17. func_6 = staticmethod(fun_6)

            解释运行成功没有报错:

    解释运行成功没有报错

  • 相关阅读:
    (Nips-2015)空间变换器网络
    行业选择有多重要?选Java我没后悔
    [SpringBoot系列]SSMP整合小项目
    岩土工程安全监测无线振弦采集仪在无线组网的关键要点
    谷歌浏览器报错:VM108:5 crbug/1173575, non-JS module files deprecated.
    0基础学习VR全景平台篇 第96篇:VR电子楼书
    学生信息登录系统(下)——判断循环语句(五)(for循环篇)
    依赖版本界限
    jvm深入研究文档--java中的堆--详解!--jvm底层探索(1)
    使用 Django 创建 App
  • 原文地址:https://blog.csdn.net/m0_67268286/article/details/126261498