Python 基础:类与函数
时间:2022-04-28
本文章向大家介绍Python 基础:类与函数,主要内容包括1、Python 中的类(上)、1.2 方法、1.3 访问控制、1.4 总结:、2、Python 中的类(中)、2.2 总结:、3、Python 中的类(下)、3.2 定制一个类、3.3 总结:、4、Python 中 self 的含义、5、Python 描述符、6、Python 元类(metaclass)、7、Python 函数相关、8、Python 迭代器和生成器、8.2 生成器、8.3 总结、9、from … import … 执行机制、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1、Python 中的类(上)
1.1 数据属性
- 类数据属性和实例数据属性
- 特殊的类属性
- 属性隐藏
1.2 方法
- 实例方法
- 类方法
- 静态方法
1.3 访问控制
- 单下划线”_”
- 双下划线”__”
1.4 总结:
本文介绍了Python中class的一些基本点:
- 实例数据属性和类数据属性的区别,以及属性隐藏
- 实例方法,类方法和静态方法直接的区别
- Python中通过”_”和”__”实现的访问控制
Refer:http://python.jobbole.com/82297/
2、Python 中的类(中)
2.1 继承
- 继承中的__init__
- super
- MRO
- __slots__
- 子类没有__slots__属性
- 子类拥有__slots__属性
2.2 总结:
- 本文介绍了Python中的继承,当使用多继承的时候,可以使用super关键字去访问父类中被子类覆盖的方法;对于方法的调用,需要参照MRO。
- 另外介绍了Python类的__slots__属性,通过这个属性可以限制类实例的可用属性。
Refer:http://python.jobbole.com/82308/
3、Python 中的类(下)
3.1 类构造和初始化
- __new__特性
- 重写__new__
- __init__的调用
- 派生不可变类型
3.2 定制一个类
- 调用魔术方法
- python中的魔术方法__ http://python.jobbole.com/85310/
3.3 总结:
- 文中介绍了类的构造和初始化方法:”__new__”和”__init__”。
- “__new__”方法是新式类特有的方法,通常情况下,__new__方法会创建返回cls(cls指代当前类)的实例,然后调用该类的”__init__”方法作为初始化方法,该方法接收这个实例(即self)作为自己的第一个参数,然后依次传入”__new__”方法中接收的位置参数和命名参数;但是,如果”__new__”没有返回cls(即当前类)的实例,那么当前类的”__init__”方法是不会被调用的。
- 通过”魔术方法”,可以对自定义类进行定制、扩展,使得自定义类变得强大、易用。
Refer:http://python.jobbole.com/82312/
4、Python 中 self 的含义
- self代表类的实例,而非类
- self不必非写成self
- self可以不写吗
- 在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例
- 在描述符类中,self指的是描述符类的实例
总结:
- self在定义时需要定义,但是在调用时会自动传入。
- self的名字并不是规定死的,但是最好还是按照约定是用self
- self总是指调用时的类的实例。
Refer:http://python.jobbole.com/81921/
5、Python 描述符
- 描述符协议中定义了“__get__”、“__set__”、”__delete__” 这些特殊方法
Refer:http://python.jobbole.com/81211/
6、Python 元类(metaclass)
- 类也是对象
- 动态地创建类
- 到底什么是元类
- __metaclass__属性
- 自定义元类
- 为什么要用metaclass类而不是函数?
- 究竟为什么要使用元类?
结语:
- 首先,你知道了类其实是能够创建出类实例的对象。好吧,事实上,类本身也是实例,当然,它们是元类的实例。
>>>class Foo(object): pass
>>> id(Foo)
142630324
- Python中的一切都是对象,它们要么是类的实例,要么是元类的实例,除了type。type实际上是它自己的元类,在纯Python环境中这可不是你能够做到的,这是通过在实现层面耍一些小手段做到的。其次,元类是很复杂的。对于非常简单的类,你可能不希望通过使用元类来对类做修改。你可以通过其他两种技术来修改类:
1) Monkey patching
2) class decorators
- 当你需要动态修改类时,99%的时间里你最好使用上面这两种技术。当然了,其实在99%的时间里你根本就不需要动态修改类 :D
Refer:http://python.jobbole.com/21351/
7、Python 函数相关
- 可变长度参数(*args 和 **kwargs)
- 非关键字变长参数(元组)
- 关键字变长参数(字典)
- 匿名函数(lambda)
- 几个内建函数:filter(),map(),reduce()
Refer:http://python.jobbole.com/82300/
8、Python 迭代器和生成器
8.1 迭代器
- __iter__()和next()方法
- 自定义迭代器
- 迭代器和可迭代对象
8.2 生成器
- 生成器执行流程
- 生成器表达式
- 递归生成器
- 生成器的send()和close()方法
8.3 总结
本文介绍了Python迭代器和生成器的相关内容。
- 通过实现迭代器协议对应的__iter__()和next()方法,可以自定义迭代器类型。对于可迭代对象,for语句可以通过iter()方法获取迭代器,并且通过next()方法获得容器的下一个元素。
- 像列表这种序列类型的对象,可迭代对象和迭代器对象是相互独立存在的,在迭代的过程中各个迭代器相互独立;但是,有的可迭代对象本身又是迭代器对象,那么迭代器就没法独立使用。
- itertools模块提供了一系列迭代器,能够帮助用户轻松地使用排列、组合、笛卡尔积或其他组合结构。
- 生成器是一种特殊的迭代器,内部支持了生成器协议,不需要明确定义__iter__()和next()方法。
- 生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果。
9、from … import … 执行机制
http://python.jobbole.com/84174/
Refer:http://python.jobbole.com/82320/
- CSS魔法堂:深入理解line-height和vertical-align
- Gradle 10分钟上手指南
- gradle项目中profile的实现
- 欧盟推出“数字经济税收制度”优化了税收制度,却影响区块链行业
- CSS魔法堂:你一定误解过的Normal flow
- ASP.NET输出JSON格式数据
- haproxy 新手上路
- 区块链是如何保护交易隐私的?eprint这篇论文告诉你答案
- gradle项目中资源文件的相对路径打包处理技巧
- Markdown 语法手册 (完整整理版)
- WordPress3.5安装出现的几个问题
- java并发编程学习: 原子变量(CAS)
- gradle项目中如何支持java与scala混合使用?
- 开始使用Linux
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- BeautifulSoup解析html介绍
- 微信会被封?!包子 Leetcode 1512 solution Number of Good Pairs
- VUE是什么?
- 爬虫如何抓取网页的动态加载数据-ajax加载
- Python 为什么用 # 号作注释符?
- 基于矩阵分解原理的推荐系统
- Python实现信息自动配对爬虫排版程序
- EOF是不是字符
- Alibaba开源Java诊断工具Arthas简单介绍
- 气象编程 | Google Earth Engine for R——提供250+ 实例
- Anaconda安装和使用
- Redhat7安装docker
- 有个笔记本就可以玩一玩Hadoop
- java如何将String转换为Int
- java中如何将数组转换为List