Python面向对象加强2.Python 中类的内置属性和内置方法(魔法函数)
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.str 和 repr
两者的目的都是为了显式的显示对象的一些必要信息,方便查看和调试。__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 中类的内置属性和内置方法(魔法函数)相关推荐
- 《Python面向对象编程指南》——1.2 基类中的__init__()方法
本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...
- python内置属性与内置方法
一.类方法 类方法:把类看作成一个对象 #语法: #@classmethod----由@开头的叫做装饰器或者修饰器 #def 类方法名(cls,形参): 类方法可以直接使用----->类对象.类 ...
- 『无为则无心』Python面向对象 — 47、Python中的self详解
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- python对象编程例子-python面向对象编程:python类和实例讲解
东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...
- 小学期Python面向对象实践-2 # Python # Cilay
· 面向对象编程之类运算操作小练习 描述 这是一个关于"面向对象编程之类运算操作"的小练习,覆盖面向对象编程中类的运算等语法的基本操作,包含两部分内容:跟随练习 和 小测验. ...
- 如何短时间提高python面向对象_初识Python面向对象阶段,你们都是怎么过来的?
泻药. 其实挺简单的,我换种说法你应该就能明白. 假设现在我要去在这个问题下挖个坑,那么为了解决这个问题,我就要考虑 : 题主问的是什么,我该怎么回答,我该在哪回答,回答后怎么提交-- 也就是说,我在 ...
- 嵩天老师Python面向对象-23,Python计算自然常数e
- python中语法错误-Python语法错误与异常及异常处理方法
回顾 在Python进阶记录之基础篇(二十)中,我们介绍了Python面向对象中的类方法和静态方法,以及类中拥有特殊功能的魔法函数.需要重点掌握类方法和静态方法的概念和基本用法,理解魔法函数的作用冰女 ...
- Python面向对象之继承
面向对象三大特性 封装 根据职责将属性和方法封装到一个抽象的类中: 继承 实现代码的重用,西安通的代码不需要重复的编写: 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度. 单继承 ...
- python面向对象生动讲解_Python面向对象语法精讲
本专题的内容结构: 第一部分主要是:面向对象基础 第二部分主要是:面向对象进阶 第一部分的结构: unit1:面向对象编程模式: (1),面向对象编程思想 (2),面向对象的三个特征 (3),Pyth ...
最新文章
- BOOST_VMD_ASSERT_IS_TUPLE宏相关的测试程序
- VTK:图表之VisualizeGraph
- 动态字段列表实现及ListT排序
- 大数据之-Hadoop3.x_MapReduce_序列化案例需求分析---大数据之hadoop3.x工作笔记0096
- power bi 地图_如何使用Power BI创建地理地图-填充地图和气泡地图
- 如何在版本控制工具中管理Sencha Architect的項目
- java 置位_java安全编码指南之:Mutability可变性详解
- .mmap文件如何打开
- Label mx条码打印软件批量制作ITF-14条码
- PPT嵌入视频,添加控件按钮控制视频播放
- 在Windows Server 2008上用Windows Media Service打造流媒体直播系统
- 如何查看本机flash版本
- 一道被前端忽略的基础题,不信看你会几题
- Excel2010无法保存提示检测到错误
- 非线性规划MATLAB求解原理,专题六--非线性规划介绍及其Matlab求解方法.ppt
- Android开发——打包apk遇到The destination folder does not exist or is not writeable
- Cherry机械键盘、开发板、无线鼠标等100份好礼,回帖就送!
- 目前绝大多数处理语言先验性文章总结
- SystemUI修改
- windows常用系统库
热门文章
- 小学英语与计算机技术整合,浅谈多媒体技术与小学英语教学的整合
- 上市公司频推高送转 年报预告掘金“白马股”(名单)
- java object转为int_java中Object转换成int或String类型方法
- 海康摄像头监控预览二开,萤石云对接说明
- Unity3D发布微信小程序
- php ctype xdigit,PHP ctype_xdigit()用法及代码示例
- [转载]借助LVS+Keepalived实现负载均衡
- Java 延迟队列 DelayQueue 的原理
- STM32驱动TM1616程序加原理图
- #FME#FME将TXT转成shape