Python 与设计模式学习心路历程 - 类别 & 继承

一、简介

想必在写程式的过程中,大家或多或少都有听过所谓物件导向 (Object Oriented Programming) 的观念,也就是所谓的 OOP,甚至在业界内流传着"想提早下班,请学好 OOP",接下来的文章会记录着笔者学习设计模式的心路历程,如果在观念上有错或是有甚么问题想讨论的,都欢迎留言讨论

另外每篇文章使用到的 code 都会同步推上笔者的 GitHub 欢迎大家取用参考

二、类别

在开始讲设计模式之前,我们先来认识一下类别以及 OOP 的观念,OOP 最大的三个核心观念就是 "封装"、"继承"、"多型",下面我们会先从甚么是类别开始依序介绍

类别其实是直接从他的英文 class 直接翻译过来的,因此与其称呼她为类别,不如直接叫他物件,也就是物件导向中的物件本人,下面就让我们看看在 Python 中怎么要建立一个物件

class House:    floor: int    color: str    def __init__(self, floor: int, color: str):        self.floor = floor        self.color = color    def __str__(self):        return f"这是个楼高 {self.floor} 层,颜色为 {self.color} 的房子"house = House(floor=10, color="red")print(house)

上面的程式当中可以分三块进行解释

属性部分:

可以看到在 House 这个物件当中我们设定了两个属性,分别为 floor 和 color

__init__ 部分:

这个部分用来控制,当今天我们在实体化这个物件的时候,我们需要传入甚么样的参数来建立,并且做一些预处理,此处单纯将传入的 floor 以及 color 设定给物件自身

__str__ 部分:

这个部份用来控制,当今天使用 print 印出这个物件的时候,会印出什么,是 python 内的写法

下图为执行上述程式后终端机的结果

http://img2.58codes.com/2024/20144024TSnpAesoeq.jpg

三、继承

若 B 类别继承了 A 类别,则称 A 类别为 B 的父类别,B 为 A 的子类别,而子类别会拥有父类别所拥有的 function 以及 attribute (私有性质的除外),也可以改写父类别的 function,而在 python 当中想要继承某个类别,则只需要在新建立的类别后面用括号加上想继承的父类别名称即可,下方付上範例

class BaseHouse:    floor: int    color: str    def __init__(self, floor: int, color: str):        self.floor = floor        self.color = color    def __str__(self):        return f"这是个楼高 {self.floor} 层,颜色为 {self.color} 的房子"class Apartment(BaseHouse):    def __str__(self):        return f"这是一个楼高 {self.floor} 层的公寓,颜色为 {self.color}"class Skyscraper(BaseHouse):    def __str__(self):        return f"这是一个楼高 {self.floor} 层的摩天大楼,颜色为 {self.color}"apartment = Apartment(floor=10, color="red")skyscraper = Skyscraper(floor=101, color="green")print(apartment)print(skyscraper)

上方的程式当中我们可以看到,笔者先建立一个 BaseHouse 作为房子的基本类别,并于下方建立 Apartment 以及 Skyscraper 两个类别且继承 BaseHouse,这样我们可以确保继承 BaseHouse 的类别都会有 color 以及 floor 这两个属性,并于两个子类别中修改 __str__ 中回传的内容

下图为执行结果

http://img2.58codes.com/2024/20144024d9HM4Ejl24.jpg


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章