本节书摘来自异步社区《Python面向对象编程指南》一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 基类中的__init__()方法

对象的生命周期主要包括了创建、初始化和销毁。后面章节会详细讨论对象的创建和销毁,本章专注于对象的初始化。

object作为所有类的基类,已经为__init__()方法提供了默认实现,一般情况下不需要重写这个函数。如果没有对它进行重写,那么在创建对象时将不会产生其他变量的实例。在某些情况下,这种默认行为是可以接受的。

对于继承自object的子类,总可以对它的属性进行扩展。例如,对于下面这个类,实例化就不对函数(area)所需要的变量(width和length)进行初始化。

class Rectangle:def area( self ):return self.length * self.width

Rectangle类的area函数在返回值时使用了两个属性,可并没有在任何地方对其赋值。在Python中,这种看似奇怪的调用尚未赋值属性的操作却是合法的。

下面这段代码演示如何使用刚定义的Rectangle类。

>>> r= Rectangle()
>>> r.length, r.width = 13, 8
>>>r.area()
104

虽然这种延迟赋值的实现方式在Python中是合法的,但是却给调用者带来了潜在的困惑,因此要尽量避免这样的用法。

然而,这样的设计看似又提供了灵活性,意味着在__init__()方法被调用时不必为所有的属性赋值。这看似是不错的选择,一个可选属性即可以看作是某子类中的成员,且无须对这个子类进行显式地定义就可以完成对原生机制的扩展。然而这种多态机制不但给程序带来了隐藏的不确定性,也会相应产生很多令人费解的if语句。

因此,延迟初始化属性的设计在某种情形下可能会有用,可是这样也可能会导致非常糟糕的设计。

在Zen of python poem一书中曾提出过这样的建议:

“显式而非隐式”。

对于每个__init__()方法,都应当显式地指定要初始化的变量。


《Python面向对象编程指南》——1.2 基类中的__init__()方法相关推荐

  1. python面向对象编程指南([美stevenflott_Python面向对象编程指南 ([美]StevenFLott洛特) 中文_IT教程网...

    资源截图:Python面向对象编程指南 ([美]StevenFLott洛特) 中文 第1部分 用特殊方法实现Python风格的类 . 1 第1章 __init__()方法 5 第2章 与Python无 ...

  2. 《Python面向对象编程指南》——2.7 __del__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第2章,第2.7节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  3. python经典书籍推荐:Python面向对象编程指南 : Mastering Object-oriented

    所属网站分类: 资源下载 > python电子书 作者:goodbody 原文链接: http://www.pythonheidong.com/blog/article/474/ 来源:pyth ...

  4. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  5. python面向对象编程指南 脚本之家_python对象及面向对象技术详解

    本文实例讲述了python对象及面向对象技术.分享给大家供大家参考,具体如下: 1 先看一个例子. 本章将讲解这个例子程序: 文件: fileinfo.py: """Fr ...

  6. python面向对象编程指南 脚本之家_Python面向对象编程之继承与多态详解

    本文实例讲述了Python面向对象编程之继承与多态.分享给大家供大家参考,具体如下: Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一 ...

  7. python写一个类方法_重写python脚本,在脚本的每个类中注入一个方法 - python

    假设我有一个python模块foo.py,其中包含: class Foo(object): def __init__(self): pass 接下来,我想解析此脚本,并在每个类中注入一个方法,然后将其 ...

  8. python面向对象编程指南 豆瓣_一文看懂Python面向对象编程(Python学习与新手入门必看)-绝对原创...

    尽管网上有许多关于Python面向对像的编程介绍,小编我看完后总觉得不是很满意,也不过瘾,所以决定自己亲自动手写篇文章,帮你理解Python面向对象的编程的基本概念和核心思想.本文内含很多实例代码,以 ...

  9. python面向对象编程实例pdf_Python面向对象编程指南 ([美]StevenFLott洛特) 中文pdf扫描版[52MB]...

    Python是一种面向对象.解释型的程序设计语言,它已经被成功应用于科学计算.数据分析以及游戏开发等诸多领域. Python面向对象编程指南深入介绍Python语言的面向对象特性,全书分3个部分共18 ...

最新文章

  1. String和StringBuilder
  2. 0基础学python看什么书-编程语言学python必看这三本书,少走一半弯路
  3. [zz]struct epoll_event
  4. Java集合篇:HashMap 与 ConcurrentHashMap 原理总结
  5. show in Breadcrumb
  6. kafka丢数据问题方案(转载+整理+汇总)
  7. 安装python3.6.1_如何安装python3.6.1/
  8. 某程序员10个月时间做了30个私活单子,纯收入40万?
  9. Node.js的集群功能以及在Express的配置
  10. IntelliJ IDEA 的项目配置和Web部署,终于搞懂了!
  11. idea打包jar的多种方式(总结-共三种)
  12. Windows_Server_2016 远程桌面120天授权过期
  13. 领域驱动设计系列关键概念
  14. 新版Space数字藏品源码+NFT数字藏品系统
  15. RSF 分布式 RPC 服务信息的暴露
  16. 5G通信中的TDL模型
  17. 入职字节跳动一年,谈谈我的工作收获,另附入职面经
  18. 薪水被应届生倒挂了,很不爽,我应该跳槽吗?
  19. 每日一犬 · 布鲁克浣熊猎犬
  20. quota 磁盘配额管理

热门文章

  1. 【JVM】Java对象创建的流程步骤
  2. 语义分割--Not All Pixels Are Equal:Difficulty-Aware Semantic Segmentation via Deep Layer Cascade
  3. Caffe 关于 LetNet-5 之 lenet_train_test.prototxt 解析
  4. jekyll静态博客提升访问速度:内嵌CSS,异步加载js,压缩HTML
  5. centos/Debian/Ubuntu上安装PyCryptodome/Crypto
  6. 在文件log 加入commit id_从物理文件理解InnoDB Redo Log
  7. asp .net mvc ajax 传值到后台,并放回JSon值解析
  8. mysql日志文件名称_MySQL 日志文件 说明
  9. python pprint用法_Python中使用pprint函数进行格式化输出的教程
  10. signature=6e39b7285090b9748e35514dc5472d29,PXE常见错误代码表