Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)

  • 一、内置属性
    • 1. __doc__:获取类的注释
    • *2. __dict__:将对象(类)的所有属性和方法以字典获取
    • *3. __slots__:限制对象可以设置的属性。
    • 4. __class__:获取对象所在的类
  • 二、内置方法(魔法函数)
    • 1. __init__
    • 2.__str__ 和 __repr__
    • 3. __call__

一、内置属性

1. doc:获取类的注释

class Person:"""这是人的类"""age = 19print(Person.__doc__)

*2. dict:将对象(类)的所有属性和方法以字典获取

class Person:"""这是人的类"""age = 19p=Person()
p.age=18
print(p.__dict__)

*3. slots:限制对象可以设置的属性。

class Person:"""这是人的类"""__slots__ = ["name", "age"]p = Person()
p.age = 18
p.name = 'lihua'
print(p.age, p.name)
p.sex = "man"
print(p.sex)

4. class:获取对象所在的类

class Person:"""这是人的类"""age = 19def __init__(self):self.name = "sz"def run(self):print("run")p=Person()
print(p.__class__)

二、内置方法(魔法函数)

1. init

在调用类时自动触发,通过object类产生的空对象自动调用__init__(),重写__init__方法可以控制对象的初始化过程。

2.strrepr

两者的目的都是为了显式的显示对象的一些必要信息,方便查看和调试。__str__被print默认调用,__repr__被控制台输出时默认调用。即,使用__str__控制用户展示,使用__repr__控制调试展示。
str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。
repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用。

class Person:def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return f"姓名是{self.name},年龄{self.age}岁"p1 = Person("小明",18)
print(p1.name,p1.age)
print(p1)

3. call

__call__使“对象”具备当做函数来调用的能力,换句话来说,__call__方法提供给对象可以被执行的能力,就像函数那样,而本质上,函数就是对象,函数就是一个拥有__call__方法的对象。
来看实例:

class Person:passp = Person()
p()


由上图可知,对象不能像函数那样调用。如果使用__call__方法:

class Person:def __call__(self, *args, **kwargs):print("xxx")p = Person()
p()


对象就可以像函数那样调用。

同时也可以传递多值参数:

class Person:def __call__(self, *args, **kwargs):print("xxx",args,kwargs)p = Person()
p(123,456,name="sz",sex="man")


关于call的应用场景

class PenFactory:def __init__(self, p_type):self.p_type = p_type  # 这个类只有一个属性def __call__(self, p_color):print("创建了一个%s类型的画笔,他是%s颜色的" % (self.p_type, p_color))gangbiF = PenFactory("钢笔")  # 创建一个对象
gangbiF('红色')
gangbiF('黄色')
gangbiF('绿色')


call()方法能够非常方便的实现装饰器。以下是一个简单的装饰器的例子:

class ClsDeco:def __init__(self, func):self.func = funcdef __call__(self, *args, **kwargs):print(f'Running {self.func.__name__}')self.func()print('End')@ClsDeco  # 等价于 bar = ClsDeco(bar)
def foo():print('do something')foo()

Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)相关推荐

  1. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  2. python内置属性与内置方法

    一.类方法 类方法:把类看作成一个对象 #语法: #@classmethod----由@开头的叫做装饰器或者修饰器 #def 类方法名(cls,形参): 类方法可以直接使用----->类对象.类 ...

  3. 『无为则无心』Python面向对象 — 47、Python中的self详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  4. python对象编程例子-python面向对象编程:python类和实例讲解

    东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...

  5. 小学期Python面向对象实践-2 # Python # Cilay

    · 面向对象编程之类运算操作小练习 描述 这是一个关于"面向对象编程之类运算操作"的小练习,覆盖面向对象编程中类的运算等语法的基本操作,包含两部分内容:跟随练习 和 小测验.‪‬‪ ...

  6. 如何短时间提高python面向对象_初识Python面向对象阶段,你们都是怎么过来的?

    泻药. 其实挺简单的,我换种说法你应该就能明白. 假设现在我要去在这个问题下挖个坑,那么为了解决这个问题,我就要考虑 : 题主问的是什么,我该怎么回答,我该在哪回答,回答后怎么提交-- 也就是说,我在 ...

  7. 嵩天老师Python面向对象-23,Python计算自然常数e

  8. python中语法错误-Python语法错误与异常及异常处理方法

    回顾 在Python进阶记录之基础篇(二十)中,我们介绍了Python面向对象中的类方法和静态方法,以及类中拥有特殊功能的魔法函数.需要重点掌握类方法和静态方法的概念和基本用法,理解魔法函数的作用冰女 ...

  9. Python面向对象之继承

    面向对象三大特性 封装 根据职责将属性和方法封装到一个抽象的类中: 继承 实现代码的重用,西安通的代码不需要重复的编写: 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度. 单继承 ...

  10. python面向对象生动讲解_Python面向对象语法精讲

    本专题的内容结构: 第一部分主要是:面向对象基础 第二部分主要是:面向对象进阶 第一部分的结构: unit1:面向对象编程模式: (1),面向对象编程思想 (2),面向对象的三个特征 (3),Pyth ...

最新文章

  1. BOOST_VMD_ASSERT_IS_TUPLE宏相关的测试程序
  2. VTK:图表之VisualizeGraph
  3. 动态字段列表实现及ListT排序
  4. 大数据之-Hadoop3.x_MapReduce_序列化案例需求分析---大数据之hadoop3.x工作笔记0096
  5. power bi 地图_如何使用Power BI创建地理地图-填充地图和气泡地图
  6. 如何在版本控制工具中管理Sencha Architect的項目
  7. java 置位_java安全编码指南之:Mutability可变性详解
  8. .mmap文件如何打开
  9. Label mx条码打印软件批量制作ITF-14条码
  10. PPT嵌入视频,添加控件按钮控制视频播放
  11. 在Windows Server 2008上用Windows Media Service打造流媒体直播系统
  12. 如何查看本机flash版本
  13. 一道被前端忽略的基础题,不信看你会几题
  14. Excel2010无法保存提示检测到错误
  15. 非线性规划MATLAB求解原理,专题六--非线性规划介绍及其Matlab求解方法.ppt
  16. Android开发——打包apk遇到The destination folder does not exist or is not writeable
  17. Cherry机械键盘、开发板、无线鼠标等100份好礼,回帖就送!
  18. 目前绝大多数处理语言先验性文章总结
  19. SystemUI修改
  20. windows常用系统库

热门文章

  1. 小学英语与计算机技术整合,浅谈多媒体技术与小学英语教学的整合
  2. 上市公司频推高送转 年报预告掘金“白马股”(名单)
  3. java object转为int_java中Object转换成int或String类型方法
  4. 海康摄像头监控预览二开,萤石云对接说明
  5. Unity3D发布微信小程序
  6. php ctype xdigit,PHP ctype_xdigit()用法及代码示例
  7. [转载]借助LVS+Keepalived实现负载均衡
  8. Java 延迟队列 DelayQueue 的原理
  9. STM32驱动TM1616程序加原理图
  10. #FME#FME将TXT转成shape