前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 基础:类与函数

Python 基础:类与函数

作者头像
用户1177713
发布2018-02-24 17:35:38
8900
发布2018-02-24 17:35:38
举报
文章被收录于专栏:数据之美数据之美

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 定制一个类

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类而不是函数?
  • 究竟为什么要使用元类?

结语:

  • 首先,你知道了类其实是能够创建出类实例的对象。好吧,事实上,类本身也是实例,当然,它们是元类的实例。
代码语言:javascript
复制
>>>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/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Python 中的类(上)
    • 1.1 数据属性
      • 1.2 方法
        • 1.3 访问控制
          • 1.4 总结:
          • 2、Python 中的类(中)
            • 2.1 继承
              • 2.2 总结:
              • 3、Python 中的类(下)
                • 3.1 类构造和初始化
                  • 3.2 定制一个类
                    • 3.3 总结:
                    • 4、Python 中 self 的含义
                    • 5、Python 描述符
                    • 6、Python 元类(metaclass)
                    • 7、Python 函数相关
                    • 8、Python 迭代器和生成器
                      • 8.1 迭代器
                        • 8.2 生成器
                          • 8.3 总结
                          • 9、from … import … 执行机制
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档