《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张牌非常麻烦而且容易出错。在介绍工厂函数前,先看一些其他的问题。

相关文章
|
1月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
WK
|
20天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
68 36
|
27天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
28天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
63 2
11种经典时间序列预测方法:理论、Python实现与应用
|
27天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
1月前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
22 2
|
1月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
21 1
|
1月前
|
Linux Python
Python获得本机本地ip地址的方法
【10月更文挑战第8天】 socket模块包含了丰富的函数和方法,可以获取主机的ip地址,例如gethostbyname方法可以根据主机名获取ip地址,gethostbyname_ex方法可以获得本机所有ip地址列表,也可以使用netifaces模块获取网卡信息。
36 0
|
1月前
|
SQL 安全 数据库
Python防止SQL注入攻击的方法
Python防止SQL注入攻击的方法
49 0