首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python基础教程9.1 如果你使用的不是 Python 3

在Python中,有些名称很特别,开头和结尾都是两个下划线。你在本书前面已经见过一些,如__future__。这样的拼写表示名称有特殊意义,因此绝不要在程序中创建这样的名称。在这样的名称中,很大一部分都是魔法(特殊)方法的名称。如果你的对象实现了这些方法,它们将在特定情况下(具体是哪种情况取决于方法的名称)被Python调用,而几乎不需要直接调用。

本章讨论几个重要的魔法方法,其中最重要的是__init__以及一些处理元素访问的方法(它们让你能够创建序列或映射)。本章还将讨论两个相关的主题:特性(property)和迭代器(iterator)。前者以前是通过魔法方法处理的,但现在通过函数property处理,而后者使用魔法方法__iter__,这让其可用于for循环中。在本章最后,将通过一个内容丰富的示例演示如何使用已有知识来解

决非常棘手的问题。

9.1 如果你使用的不是 Python 3

在Python 2.2中, Python对象的工作方式有了很大的变化。这种变化带来了多个方面的影响。这些影响对Python编程新手来说大都不重要,但有一点需要注意:即便你使用的是较新的Python 2版本,有些功能(如特性和函数super)也不适用于旧式类。要让你的类是新式的,要么在模块开头包含赋值语句__metaclass__ = type(这在第7章提到过),要么直接或间接地继承内置类

object或其他新式类。请看下面两个类:

class NewStyle(object):

more_code_here

class OldStyle:

more_code_here

在这两个类中, NewStyle是一个新式类,而OldStyle是一个旧式类。如果文件开头包含赋值语句__metaclass__ = type,这两个类都将是新式类。

注意 也 可 在 类 的 作 用 域 内 给 变 量 __metaclass__ 赋 值 , 但 这 样 做 只 设 置 当 前 类 的 元 类(metaclass)。元类是其他类所属的类,这是一个非常复杂的主题

在本书中,我并没有在所有示例中都显式地设置元类或继承object。然而,如果你的程序无需与旧版Python兼容,建议将所有类都定义为新式类,并使用将在9.2.3节介绍的函数super等功能。

请注意,在Python 3中没有旧式类,因此无需显式地继承object或将__metaclass__设置为type。所有的类都将隐式地继承object。如果没有指定超类,将直接继承它,否则将间接地继承它。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181127G0A9VH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券