前言

关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性。

查看内建属性

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零基础教程:函数和类内建魔法属性相关推荐

  1. Python零基础教程

    Python 零基础教程 介绍 Python,一个简单而强大的编程语言.有人说它是女神的语言,也有人认为它是所有程序员的头等选项. 用过这种语言或者学过其他任何一门编程语言的开发者都 能轻松上手Pyt ...

  2. python科研_高效做科研,Python 零基础教程

    Python 高效做科研-讲义与辅助材料课程目录 [加餐]什么是函数,模块和包?.mp4 2.1 零基础如何安装与使用 Python.mp4 2.2 学习 Python 第一步:Python涉及到的数 ...

  3. 〖Python零基础入门篇㊲〗- 类的继承、多态与多重继承

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  4. python零基础教程总结30天

    一.常用快捷键 ctrl+c 复制 ctrl+v 粘粘 ctrl+z 撤销 ctrl+b 执行 ctrl+s保存 ctrl+shift+z 反撤销 ctrl+x 剪切 ctrl+/(#)注释 ctrl ...

  5. python画画代码大全_太赞了,微软正式推出 Python 零基础教程!

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub!Python 可以说是当今世界最火的编程语言之一了.数据科学家和人工智能从业者们 ...

  6. 贪吃蛇python零基础教程_自学python-tkinter项目-贪吃蛇的程序(0基础入门学习)...

    python学习了2个月有点想放弃了(本人英文基本为0,之前也根本没接触过IT行业) 不过贪吃蛇的程序做成,给了继续下去的理由和信心 下面是代码: import tkinter import rand ...

  7. 【python】使用property函数为类创建可管理属性fget\fset\fdel

    import mathclass Circle:def __init__(self, radius):self.__radius = radius # 设置私有属性,不让用实例.__radius访问d ...

  8. python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...

    课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...

  9. c语言python零基础教学_编程零基础应当如何开始学习 Python?附教程

    零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言.此外,python在机器学习,人工智能领域也非常 ...

最新文章

  1. 有互感的电感的串并联
  2. html5实现ios长按图标后进入图标排序及删除功能的效果
  3. Split和正则表达式的区别
  4. 队列(常用数据结构之一)
  5. 阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析
  6. class12_pack_grid_place 放置位置
  7. 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)
  8. php正则去除base64,使用PHP preg_match_all的正则表达式base64块
  9. Simulink之三相桥式半控整流电路
  10. python好学么数学_Python难学吗,本人数学和英语都很差,想学,都是兴趣爱好
  11. 您应该知道的ES2020中的10个JavaScript新功能
  12. python判别性别的代码_python如何实现性别识别 python实现性别识别代码示例
  13. 如何建立完整的数据治理体系
  14. vim文件时自动添加作者、时间、版权等信息
  15. linux rman备份与恢复,RMAN备份与恢复 —— 完全恢复与不完全恢复
  16. mysql 查询替换语句_MYSQL查询字符替换sql语句
  17. Android APP中保持屏幕不自动灭屏的一种方法
  18. 万维网、因特网、互联网区别
  19. 安装ecshop php,PHPstudy和ecshop的安装和使用
  20. signature=79c15555364a0c6cd0022a5265ab0ae3,XM06B5 1SBP260103R1001

热门文章

  1. Linux查看swap使用情况小脚本
  2. Facebook欧盟垄断案陷入灰色地带 立法或调整
  3. 30分钟LINQ教程【转】
  4. LBaaS 实现机制 - 每天5分钟玩转 OpenStack(125)
  5. 3、ACE-实用生活口语---讲打电话Talking on the phone
  6. 隐马尔科夫模型(Hidden Markov Models) 系列之五
  7. python整数类型进制表示_python2学习经验(一) 变量数据类型
  8. 采购交货期延误的原因分析
  9. 从sap xi生产wsdl文件,客户端怎么做webservice?
  10. me21n增强BADI:ME_PROCESS_PO_CUST之process_account