《Python面向对象编程指南》——1.2 基类中的__init__()方法
本节书摘来自异步社区《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__()方法相关推荐
- python面向对象编程指南([美stevenflott_Python面向对象编程指南 ([美]StevenFLott洛特) 中文_IT教程网...
资源截图:Python面向对象编程指南 ([美]StevenFLott洛特) 中文 第1部分 用特殊方法实现Python风格的类 . 1 第1章 __init__()方法 5 第2章 与Python无 ...
- 《Python面向对象编程指南》——2.7 __del__()方法
本节书摘来自异步社区<Python面向对象编程指南>一书中的第2章,第2.7节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...
- python经典书籍推荐:Python面向对象编程指南 : Mastering Object-oriented
所属网站分类: 资源下载 > python电子书 作者:goodbody 原文链接: http://www.pythonheidong.com/blog/article/474/ 来源:pyth ...
- Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合
Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...
- python面向对象编程指南 脚本之家_python对象及面向对象技术详解
本文实例讲述了python对象及面向对象技术.分享给大家供大家参考,具体如下: 1 先看一个例子. 本章将讲解这个例子程序: 文件: fileinfo.py: """Fr ...
- python面向对象编程指南 脚本之家_Python面向对象编程之继承与多态详解
本文实例讲述了Python面向对象编程之继承与多态.分享给大家供大家参考,具体如下: Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一 ...
- python写一个类方法_重写python脚本,在脚本的每个类中注入一个方法 - python
假设我有一个python模块foo.py,其中包含: class Foo(object): def __init__(self): pass 接下来,我想解析此脚本,并在每个类中注入一个方法,然后将其 ...
- python面向对象编程指南 豆瓣_一文看懂Python面向对象编程(Python学习与新手入门必看)-绝对原创...
尽管网上有许多关于Python面向对像的编程介绍,小编我看完后总觉得不是很满意,也不过瘾,所以决定自己亲自动手写篇文章,帮你理解Python面向对象的编程的基本概念和核心思想.本文内含很多实例代码,以 ...
- python面向对象编程实例pdf_Python面向对象编程指南 ([美]StevenFLott洛特) 中文pdf扫描版[52MB]...
Python是一种面向对象.解释型的程序设计语言,它已经被成功应用于科学计算.数据分析以及游戏开发等诸多领域. Python面向对象编程指南深入介绍Python语言的面向对象特性,全书分3个部分共18 ...
最新文章
- String和StringBuilder
- 0基础学python看什么书-编程语言学python必看这三本书,少走一半弯路
- [zz]struct epoll_event
- Java集合篇:HashMap 与 ConcurrentHashMap 原理总结
- show in Breadcrumb
- kafka丢数据问题方案(转载+整理+汇总)
- 安装python3.6.1_如何安装python3.6.1/
- 某程序员10个月时间做了30个私活单子,纯收入40万?
- Node.js的集群功能以及在Express的配置
- IntelliJ IDEA 的项目配置和Web部署,终于搞懂了!
- idea打包jar的多种方式(总结-共三种)
- Windows_Server_2016 远程桌面120天授权过期
- 领域驱动设计系列关键概念
- 新版Space数字藏品源码+NFT数字藏品系统
- RSF 分布式 RPC 服务信息的暴露
- 5G通信中的TDL模型
- 入职字节跳动一年,谈谈我的工作收获,另附入职面经
- 薪水被应届生倒挂了,很不爽,我应该跳槽吗?
- 每日一犬 · 布鲁克浣熊猎犬
- quota 磁盘配额管理
热门文章
- 【JVM】Java对象创建的流程步骤
- 语义分割--Not All Pixels Are Equal:Difficulty-Aware Semantic Segmentation via Deep Layer Cascade
- Caffe 关于 LetNet-5 之 lenet_train_test.prototxt 解析
- jekyll静态博客提升访问速度:内嵌CSS,异步加载js,压缩HTML
- centos/Debian/Ubuntu上安装PyCryptodome/Crypto
- 在文件log 加入commit id_从物理文件理解InnoDB Redo Log
- asp .net mvc ajax 传值到后台,并放回JSon值解析
- mysql日志文件名称_MySQL 日志文件 说明
- python pprint用法_Python中使用pprint函数进行格式化输出的教程
- signature=6e39b7285090b9748e35514dc5472d29,PXE常见错误代码表