《Python面向对象编程指南》——1.3 在基类中实现init()方法

简介:

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

1.3 在基类中实现init()方法

通过实现__init()__方法来初始化一个对象。每当创建一个对象,Python会先创建一个空对象,然后调用该对象的__init()__函数。这个方法提供了对象内部变量以及其他一些一次性过程的初始化操作。

以下是关于一个Card类层次结构定义的一些例子。这里定义了一个基类和3个子类来描述Card类的基本信息。有两个变量是参数直接赋值的,另外两个参数是通过初始化方法计算来完成初始化的。

class Card:
  def __init__( self, rank, suit ):
    self.suit= suit
    self.rank= rank
    self.hard, self.soft = self._points()
class NumberCard( Card ):
  def _points( self ):
    return int(self.rank), int(self.rank)
class AceCard( Card ):
  def _points( self ):
    return 1, 11
class FaceCard( Card ):
  def _points( self ):
    return 10, 10

在以上代码段中,__init()__把公共初始化方法引入到了基类Card中,这样3个子类NumberCard、AceCard和FaceCard都能够共享公共的初始化逻辑。

这是一个常见的多态设计,每个子类为_points()方法提供特有的实现。所有的子类有相同的方法名和属性。这3个子类在使用时可以通过互换对象来更换实现方式。

如果只是简单地使用字母来定义花色,就可以使用如下的代码段来创建Card对象。

cards = [ AceCard('A', ''), NumberCard('2',''), NumberCard('3',''), ]

这里枚举了Card集合中的几个Card对象,把牌面值(rank)和花色(suit)作为参数传入来实例化。从长远来看,需要一个更智能的工厂函数来创建Card对象,因为枚举所有52张牌非常麻烦而且容易出错。在介绍工厂函数前,先看一些其他的问题。

相关文章
|
7天前
|
Python
python魔法方法如何应用
【4月更文挑战第12天】这个Python示例展示了类继承和方法重写。`Student`类继承自`Person`,并覆盖了`say_hello`方法。通过`super().__init__(name)`调用父类的`__init__`初始化`name`属性,`Student`添加了`age`属性,并在重写的`say_hello`中使用。创建`Student`实例`student`并调用其`say_hello`,输出定制的问候信息。
19 1
|
1天前
|
存储 关系型数据库 MySQL
Python搭建代理IP池实现存储IP的方法
Python搭建代理IP池实现存储IP的方法
|
1天前
|
Python
Python动态IP代理防止被封的方法
Python动态IP代理防止被封的方法
|
1天前
|
数据采集 存储 安全
python检测代理ip是否可用的方法
python检测代理ip是否可用的方法
|
2天前
|
数据可视化 测试技术 Python
在Python和R中使用交叉验证方法提高模型性能
在Python和R中使用交叉验证方法提高模型性能
|
3天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
34 9
|
3天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
37 0
|
8天前
|
机器学习/深度学习 人工智能 算法
|
8天前
|
安全 Python
python字典的内置方法
Python字典主要方法包括:`keys()`(返回所有键)、`values()`(返回所有值)、`items()`(返回所有键值对)、`get()`(安全取值,键不存在时返回默认值)、`setdefault()`(设置默认值)、`update()`(合并字典)、`pop()`(删除并返回值)、`clear()`(清空字典)、`copy()`(浅拷贝)、`fromkeys()`(新建字典并设置默认值)、`popitem()`(随机删除键值对)。
8 0
|
9天前
|
索引 Python
python元组内置方法知识
Python元组方法简介:`count()`统计元素出现次数,如`t.count(2)`返回3;`index()`获取元素首次出现的索引,如`t.index(3)`返回2;`insert(index, element)`在指定位置插入元素,如`t.insert(1, 'a')`;`remove(element)`删除元素,如`t.remove(2)`返回 `(1, 3)`;`pop()`删除并返回最后一个元素,如`t.pop()`返回3;`reverse()`反转元组元素,如`t.reverse()`后`t`变为`(3, 2, 1)`。
17 5