Python零基础教程:函数和类内建魔法属性
前言
关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性。
查看内建属性
class Person(object):passdef get_name():passif __name__ == "__main__":person = Person()print(dir(get_name))print(dir(Person))print(dir(person))
# 结果
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
比较一下发现类和它的实例内建的属性和方法是一样的,函数似乎比类的内建的属性和方法更多,分离出属性:
- 类的内建属性有:
'__class__', '__dict__', '__doc__', '__module__', '__weakref__'
- 函数的内建属性有:
'__annotations__', '__class__', '__closure__', '__code__', '__defaults__', '__dict__','__doc__', '__kwdefaults__', '__module__', '__name__','__qualname__',__globals__
前面我们基本介绍过来类的内建属性,现在重点针对函数的内建属性。
函数的内建属性
内建属性是不能在函数的作用域内直接使用的,因为它们没有被显性地定义,它们需要通过函数变量来调用。
_annotations_
记录函数的参数和返回值的类型,前提是定义时指定了类型,否则为{}.
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def get(x:int, y:int) -> int:return x + yprint(get.__annotations__) # {'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
_class_
python万物皆对象,所以函数也是一个对象,可以看做简化版的类的实例,它的类对象就是FunctionType。
def get(x:int, y:int) -> int:return x + y
print(get.__class__) # <class 'function'>
__defaults__
和__kwdefaults__
__defaults__
属性用来存储参数的默认值,是一个元组,如果没有默认值为None。
def get(x:int=1, y:int=3) -> int:return x + y
print(get.__defaults__) # (1, 3)
__kwdefaults__
记录强制关键字参数的默认值,字典形式,没有置为None。
def get(x:int, y:int, *, age=20):pass
print(get.__kwdefaults__) # {'age':20}# 函数*后面的参数表示强制关键字参数,即一定要:
get(3,4,age=30)这种方式调用
__name__
和_qualname_
__name__
和__qualname__
分别表示函数的名字和合法名,__name__
仅仅是函数名字,而__qualname__
会用点示法显示函数所在的类和模块。
__doc__
和_module_
:和类的该属性一样,__doc__
记录该函数的说明,__module__
表示函数定义的模块的名字。_globals_
:函数定义所在模块的全局命名空间的字典的引用。_closure_
:以包含cell的元组形式返回闭包所包含的自由变量。
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def name(x=2):c = 0def name1(y):return x + y + creturn name1
n = name()
print(n.__closure__)
# 结果
(<cell at 0x000001B1B201EEB8: int object at 0x00000000619760C0>,
<cell at 0x000001B1BAEFB768: int object at 0x0000000061976100>)
# 这里的自由变量指的是y和c
_dict_
既然函数也是对象,那么它也应该有自己的属性,默认为{}.
def get(x:int=1, y:int=3) -> int:return x + y
get.name = 'get'
print(get.__dict__) # {'name':'get'}
_code_
:返回已编译的函数对象,CodeType对象。
总结
以上是普通的自定义函数的内建属性,它和生成器函数、协同函数的概念是不一样的;
对于普通的业务开发来说,需要用到的内建属性一般为:__defaults__
,__name__
,__doc__
.
Python零基础教程:函数和类内建魔法属性相关推荐
- Python零基础教程
Python 零基础教程 介绍 Python,一个简单而强大的编程语言.有人说它是女神的语言,也有人认为它是所有程序员的头等选项. 用过这种语言或者学过其他任何一门编程语言的开发者都 能轻松上手Pyt ...
- python科研_高效做科研,Python 零基础教程
Python 高效做科研-讲义与辅助材料课程目录 [加餐]什么是函数,模块和包?.mp4 2.1 零基础如何安装与使用 Python.mp4 2.2 学习 Python 第一步:Python涉及到的数 ...
- 〖Python零基础入门篇㊲〗- 类的继承、多态与多重继承
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
- python零基础教程总结30天
一.常用快捷键 ctrl+c 复制 ctrl+v 粘粘 ctrl+z 撤销 ctrl+b 执行 ctrl+s保存 ctrl+shift+z 反撤销 ctrl+x 剪切 ctrl+/(#)注释 ctrl ...
- python画画代码大全_太赞了,微软正式推出 Python 零基础教程!
公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub!Python 可以说是当今世界最火的编程语言之一了.数据科学家和人工智能从业者们 ...
- 贪吃蛇python零基础教程_自学python-tkinter项目-贪吃蛇的程序(0基础入门学习)...
python学习了2个月有点想放弃了(本人英文基本为0,之前也根本没接触过IT行业) 不过贪吃蛇的程序做成,给了继续下去的理由和信心 下面是代码: import tkinter import rand ...
- 【python】使用property函数为类创建可管理属性fget\fset\fdel
import mathclass Circle:def __init__(self, radius):self.__radius = radius # 设置私有属性,不让用实例.__radius访问d ...
- python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...
课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...
- c语言python零基础教学_编程零基础应当如何开始学习 Python?附教程
零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言.此外,python在机器学习,人工智能领域也非常 ...
最新文章
- 有互感的电感的串并联
- html5实现ios长按图标后进入图标排序及删除功能的效果
- Split和正则表达式的区别
- 队列(常用数据结构之一)
- 阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析
- class12_pack_grid_place 放置位置
- 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)
- php正则去除base64,使用PHP preg_match_all的正则表达式base64块
- Simulink之三相桥式半控整流电路
- python好学么数学_Python难学吗,本人数学和英语都很差,想学,都是兴趣爱好
- 您应该知道的ES2020中的10个JavaScript新功能
- python判别性别的代码_python如何实现性别识别 python实现性别识别代码示例
- 如何建立完整的数据治理体系
- vim文件时自动添加作者、时间、版权等信息
- linux rman备份与恢复,RMAN备份与恢复 —— 完全恢复与不完全恢复
- mysql 查询替换语句_MYSQL查询字符替换sql语句
- Android APP中保持屏幕不自动灭屏的一种方法
- 万维网、因特网、互联网区别
- 安装ecshop php,PHPstudy和ecshop的安装和使用
- signature=79c15555364a0c6cd0022a5265ab0ae3,XM06B5 1SBP260103R1001
热门文章
- Linux查看swap使用情况小脚本
- Facebook欧盟垄断案陷入灰色地带 立法或调整
- 30分钟LINQ教程【转】
- LBaaS 实现机制 - 每天5分钟玩转 OpenStack(125)
- 3、ACE-实用生活口语---讲打电话Talking on the phone
- 隐马尔科夫模型(Hidden Markov Models) 系列之五
- python整数类型进制表示_python2学习经验(一) 变量数据类型
- 采购交货期延误的原因分析
- 从sap xi生产wsdl文件,客户端怎么做webservice?
- me21n增强BADI:ME_PROCESS_PO_CUST之process_account