Python 高级教程之类(1),大专生面试阿里P7居然过了

2.提供了代码的可重用性。我们不必一次又一次地编写相同的代码。此外,它允许我们在不修改类的情况下向类添加更多功能。

3.本质上是可传递的,这意味着如果类 B 继承自另一个类 A,那么 B 的所有子类将自动继承自类 A。

下面是一个简单的 Python 继承示例

一个演示继承的 Python 程序

基类或超类。 注意括号中的 object。(通常,object 是所有类的祖先)

在 Python 3.x 中,“class Person”等价于“class Person(object)”

class Person(object):

构造函数

def init(self, name):

self.name = name

获得 name

def getName(self):

return self.name

检查此人是否为员工

def isEmployee(self):

return False

继承或子类(注意括号中的 Person)

class Employee(Person):

这里我们返回 true

def isEmployee(self):

return True

驱动程序代码

emp = Person(“Haiyong1”) # Person 对象

print(emp.getName(), emp.isEmployee())

emp = Employee(“Haiyong2”) # Employee 对象

print(emp.getName(), emp.isEmployee())

输出:

Haiyong1 False

Haiyong2 True

Python 中的封装

封装是面向对象编程(OOP)中的基本概念之一。它描述了包装数据的想法以及在一个单元内处理数据的方法。这限制了直接访问变量和方法,并且可以防止意外修改数据。为防止意外更改,对象的变量只能通过对象的方法进行更改。这些类型的变量称为私有变量。

类是封装的一个例子,因为它封装了成员函数、变量等所有数据。

考虑一个真实的封装示例,在公司中,有不同的部门,如客服部、财务部、销售部等。财务部处理所有财务交易并记录与财务相关的所有数据。同样,销售部分处理所有与销售相关的活动并保存所有销售记录。现在可能会出现一种情况,财务部的员工出于某种原因需要某月的所有销售数据。在这种情况下,不允许他直接访问销售部的数据。他首先必须联系销售部的经理,然后申请查阅具体数据。这就是封装。在这里,销售部的数据和可以操作它们的员工被包装在一个单一的名称“销售部”下。使用封装也会隐藏数据,在此示例中,销售、财务或客服等部门的数据对任何其他部门都是隐藏的。

Protected 成员

Protected 成员(在 C++ 和 JAVA 中)是不能在类外部访问但可以从类及其子类内部访问的那些成员。要在 Python 中完成此操作,只需按照约定在成员名称前加上一个下划线“_”即可。

尽管 Protected 变量可以在类外以及派生类中访问(在派生类中也可以修改),但习惯上(约定不是规则)不访问受保护的类主体。

注意: __init__ 方法是一个构造函数,并在类的对象被实例化后立即运行。

演示 Protected 成员的 Python 程序

class Base:

def init(self):

Protected 成员

self._a = 2

创建派生类

class Derived(Base):

def init(self):

调用基类的构造函数

Base.init(self)

print("调用基类的 Protected 成员: ",

self._a)

Modify the protected variable:

self._a = 3

print("调用类外修改的 Protected 成员: ",

self._a)

obj1 = Derived()

obj2 = Base()

调用 Protected 成员可以访问,但由于约定不应该这样做

print("访问 obj1 的 Protected 成员: ", obj1._a)

在外部访问受保护的变量

print("访问 obj2 的 Protected 成员: ", obj2._a)

输出:

调用基类的 Protected 成员:2

调用类外修改的 Protected 成员:3

访问 obj1 的 Protected 成员:3

访问 obj2 的 Protected 成员:2

Private 成员

Private 成员类似于 Protected 成员,不同之处在于声明为私有的类成员既不能在类外访问,也不能被任何基类访问。在 Python 中,不存在只能在类内部访问的私有实例变量。

但是,要定义 Private 成员,请在成员名称前加上双下划线“__”。

注意:可以通过 python name mangling 在类外部访问 Python 的 Private 成员和 Protected 成员。

Python 中的魔术方法

魔术方法确保了一致的数据模型,该模型保留了内置类的继承特性,同时提供了自定义的类行为。这些方法可以丰富类设计,增强语言的可读性。

魔术方法语法

两边用两个下划线包裹的方法称为魔术方法。魔术方法的背后是重载 Python 的内置方法及其运算符。在这里,_syntax 防止程序员为自定义方法定义相同的名称。每种魔术方法都有其用途。让我们考虑一个检查等价的例子。

例子:

class EquivalenceClass(object):

def eq(self, other):

return type(self) == type(other)

print(EquivalenceClass() == EquivalenceClass())

print(EquivalenceClass() == ‘MyClass’)

输出

True

False

__eq__方法采用两个参数——self 和 object——来检查相等性。重要的是要理解,当使用 == 运算符比较两个对象时会调用 __eq__ 方法。让我们来看看 python 中一些常见的魔术方法。

常用魔法方法

在 Python 中,我们有各种各样的魔法方法——每一种都有它的用途。下面我们就梳理一下,几种常见的魔法方法:

  • 创建:__init____new__ 方法

  • 破坏:__del__ 方法

  • 类型转换:__str____int____float____complex____bool__ 方法

  • 比较:__eq____ne__方法

二元运算符的魔术方法:

  • vanilla 方法

  • reversei 方法

  • in-place 方法

一元运算符的魔术方法:

  • __pos__ 方法

  • __neg__ 方法

  • __invert__ 方法

魔术方法其实就是一种一致的数据模型,可以自定义类行为并增强可读性,而不会丢失其继承的特性。但是在提供自定义功能之前,需要确保是否需要自定义。

Python 中的设计模式

设计模式是软件工程中最重要的部分,因为它们为软件设计中常见的问题提供了通用的可重复解决方案。我们不能将设计模式视为可以直接转换为代码的完成设计。它们只是描述如何高效解决特定问题的模板。

设计模式分类

创造性设计模式

创建模式提供有关类实例化或对象实例化的基本信息。类创建模式和对象创建模式是创建设计模式的主要分类。虽然类创建模式在实例化过程中有效地使用了继承,但对象创建模式有效地使用委托来完成工作。

创造性设计模式的分类 ——

  • 工厂模式

  • 抽象工厂模式

  • 建造者模式

  • 原型模式

  • 单例模式

结构设计模式

结构设计模式是关于组织不同的类和对象以形成更大的结构并提供新功能,同时保持这些结构的灵活性和效率。大多数情况下,他们使用继承来组合所有接口。它还确定了导致结构简化的关系。

结构设计模式的分类——

  • 适配器模式

  • 桥接模式

  • 复合模式

  • 装饰器模式

  • 外观模式

  • 代理模式

  • 蝇量模式

行为设计模式

行为模式都是关于识别对象之间常见的通信模式并实现这些模式。这些模式与算法和对象之间的职责分配有关。

行为设计模式分类——

  • 责任链模式

  • 命令模式

  • 迭代器模式

  • 中介模式

  • 记忆模式

  • 观察者模式

  • 状态方模式

  • 策略模式

  • 模板模式

  • 访客模式

举例说明几种常用设计模式

1.工厂设计模式

工厂方法是一种创建型设计模式,它允许接口或类创建对象,但让子类决定要实例化哪个类或对象。使用工厂方法,我们有最好的方法来创建一个对象。这里,对象的创建不向客户端公开逻辑,并且为了创建新类型的对象,客户端使用相同的公共接口。

现在让我们通过一个例子来理解工厂方法:

工厂方法的 Python 代码

它属于创建型设计模式

class FrenchLocalizer:

“”" 只返回法语版本 “”"

def init(self):

self.translations = {“car”: “voiture”, “bike”: “bicyclette”,“cycle”:“cyclette”}

def localize(self, msg):

“”“使用翻译更改信息”“”

return self.translations.get(msg, msg)

class SpanishLocalizer:

“”“只返回西班牙语版本”“”

def init(self):

self.translations = {“car”: “coche”, “bike”: “bicicleta”,“cycle”:“ciclo”}

def localize(self, msg):

“”“使用翻译更改信息”“”

return self.translations.get(msg, msg)

class EnglishLocalizer:

“”“只需返回相同的消息”“”

def localize(self, msg):

return msg

def Factory(language =“English”):

“”“工厂方法”“”

localizers = {

“French”: FrenchLocalizer,

“English”: EnglishLocalizer,

“Spanish”: SpanishLocalizer,

}

return localizerslanguage

if name == “main”:

f = Factory(“French”)

e = Factory(“English”)

s = Factory(“Spanish”)

message = [“car”, “bike”, “cycle”]

for msg in message:

print(f.localize(msg))

print(e.localize(msg))

print(s.localize(msg))

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

上Python开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
[外链图片转存中…(img-v39CJ3QF-1711942732731)]

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值