鱼C论坛

 找回密码
 立即注册
查看: 7672|回复: 24

[技术交流] [记录下学习心得] | 第040讲:类和对象:一些相关的BIF

[复制链接]
回帖奖励 24 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次
发表于 2021-5-8 09:01:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 TC_DHL 于 2022-6-1 00:23 编辑

修饰符: classmethod | staticmethod | property

如果有不对的地方,欢迎指正, 互相学习哈!


修饰符:类方法 @classmethod | 无需显式地传递类名做实参
  1. class Computer:
  2.     # 类属性modules
  3.     __modules = {"cpu":"Intel", "内存":"镁光", "硬盘":"970-Pro"}

  4.     # 设定修饰符@类方法 | 类的函数或者叫类的方法output_modules
  5.     @classmethod
  6.     def output_modules(cls):
  7.         for (i,s) in cls.__modules.items():
  8.             print(i, ':', s)

  9. # 调用类的方法output_modules,无需显式地传递类名做实参
  10. Computer.output_modules()

  11. #-------------------------------------------------------------
  12. # 输出结果:
  13. # cpu : Intel
  14. # 内存 : 镁光
  15. # 硬盘 : 970-Pro
复制代码

也可被其他类直接进行调用(感觉有点全局的意思), 看例子代码如下:
  1. class Computer:
  2.     # 类属性modules
  3.     __modules = {"cpu":"Intel", "内存":"镁光", "硬盘":"970-Pro"}

  4.     # 设定修饰符@类方法 | 类的函数或者叫类的方法output_modules
  5.     @classmethod
  6.     def output_modules(cls):
  7.         for (i,s) in cls.__modules.items():
  8.             print(i, ':', s)


  9. class OtherClass:
  10.     def __init__(self):
  11.         pass
  12.     def _test_OtherClass(self):
  13.         # 调用类的方法output_modules,无需显式地传递类名做实参
  14.         Computer.output_modules()

  15. aaaa = OtherClass()
  16. aaaa._test_OtherClass()

  17. #-------------------------------------------------------------
  18. # 输出结果:
  19. # cpu : Intel
  20. # 内存 : 镁光
  21. # 硬盘 : 970-Pro
复制代码


修饰符:静态方法 @staticmethod | 必须显式地传递类名做实参
  1. class Computer:
  2.     # 类属性modules
  3.     __modules = {"cpu":"Intel", "内存":"镁光", "硬盘":"970-Pro"}

  4.     # 在静态方法search_module中定义形参var,准备传递类:Computer
  5.     # 调用时必须显性地传递类名,才能实现类方法一样的效果
  6.     # 设定修饰符@静态方法 | 类的函数或者叫类的方法search_module
  7.     @staticmethod
  8.     def search_module(var, module_value):
  9.         print(var.__modules[module_value])

  10. Computer.search_module(Computer, "cpu")
  11. Computer.search_module(Computer, "内存")
  12. Computer.search_module(Computer, "硬盘")

  13. #-------------------------------------------------------------
  14. # 输出结果:
  15. # Intel
  16. # 镁光
  17. # 970-Pro
复制代码

也可被其他类直接进行调用(有点全局的意思.....), 看例子代码如下:
  1. class Computer:
  2.     # 类属性modules
  3.     __modules = {"cpu":"Intel", "内存":"镁光", "硬盘":"970-Pro"}

  4.     # 在静态方法search_module中定义形参var,准备传递类:Computer
  5.     # 调用时必须显性地传递类名,才能实现类方法一样的效果
  6.     # 设定修饰符@静态方法 | 类的函数或者叫类的方法search_module
  7.     @staticmethod
  8.     def search_module(var, module_value):
  9.         print(var.__modules[module_value])


  10. class OtherClass:
  11.     def __init__(self):
  12.         pass

  13.     def _test_OtherClass(self):
  14.         # 调用类的静态方法search_module,必须显式地传递类名做实参
  15.         Computer.search_module(Computer, "cpu")
  16.         Computer.search_module(Computer, "内存")
  17.         Computer.search_module(Computer, "硬盘")

  18. aaaa = OtherClass()
  19. aaaa._test_OtherClass()

  20. #-------------------------------------------------------------
  21. # 输出结果:
  22. # Intel
  23. # 镁光
  24. # 970-Pro
复制代码



@property 此修饰符可赋值给变量, 语法为:x = property(getx, setx, delx)
        如果是以此种方法的话, 函数名或者说是方法名可以不相同
如果是以装饰器形式使用的话, 函数名或者说是方法名必须相同, 例子代码如下:

游客,如果您要查看本帖隐藏内容请回复


2022-06-01 推翻例子中"删除字典中内容, 这里没办法通过@modules_property.deleter以达到删除字典中某个键值"这句话:
游客,如果您要查看本帖隐藏内容请回复
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-8 10:21:58 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-16 11:25:28 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-3 16:37:33 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-4 15:42:38 | 显示全部楼层

回帖奖励 +1 鱼币

学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-25 12:38:59 | 显示全部楼层

回帖奖励 +1 鱼币

楼主继续加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-25 13:11:22 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-26 02:58:06 | 显示全部楼层

回帖奖励 +1 鱼币

看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-29 09:56:43 | 显示全部楼层
感谢您的无私奉献
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-29 15:44:24 | 显示全部楼层

回帖奖励 +1 鱼币

写挺好!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-31 07:34:18 | 显示全部楼层

感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 16:28:41 | 显示全部楼层

回帖奖励 +1 鱼币

XIEXIE
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 18:23:03 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-10 08:46:27 | 显示全部楼层

回帖奖励 +1 鱼币

学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-10 10:17:29 | 显示全部楼层

回帖奖励 +1 鱼币

学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-10 10:55:15 | 显示全部楼层

回帖奖励 +1 鱼币

学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-11 10:50:24 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-12 21:20:42 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-12 21:27:24 | 显示全部楼层

回帖奖励 +1 鱼币

1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-13 11:36:09 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表