Python面向对象编程学习笔记(下篇)

Python:面向对象编程

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

目录:

● 接口类 

● 静态方法 

● 魔术方法 

● 运算符重载 

● Super() 

● 多重继承 

● 方法解析顺序

接口类

在像 Python 这样的面向对象语言中,接口是应该由实现类提供的方法签名的集合。实现接口是编写有组织的代码和实现抽象的一种方式。

zope.interface包为 Python 提供了“对象接口”的实现。它由 Zope Toolkit 项目维护。该包直接导出两个对象“接口”和“属性”。它还导出了几个辅助方法。它旨在提供比 Python 的内置 abc 模块更严格的语义和更好的错误消息。

import zope.interface
 
class MyInterface(zope.interface.Interface):
  x = zope.interface.Attribute("foo")
  def method1(self, x):
    pass
  def method2(self):
    pass

print(type(MyInterface))
print(MyInterface.__module__)
print(MyInterface.__name__)

# get attribute
x = MyInterface['x']
print(x)
print(type(x))

实现接口

接口充当设计类的蓝图,因此接口是使用类上的实现者装饰器实现的。如果一个类实现了一个接口,则该类的实例提供了该接口。除了它们的类实现的内容之外,对象还可以直接提供接口。

class MyInterface(zope.interface.Interface):
 x = zope.interface.Attribute("foo")
 def method1(self, x):
   pass
 def method2(self):
   pass
 
@zope.interface.implementer(MyInterface)
class MyClass:
 def method1(self, x):
   return x**2
 def method2(self):
   return "foo"

我们声明 MyClass 实现了 MyInterface。这意味着 MyClass 的实例提供 MyInterface。

静态方法

与实例方法不同,静态方法不绑定到对象。换句话说,静态方法不能访问和修改对象的状态。

此外,Python 不会隐式地将 cls 参数(或 self 参数)传递给静态方法。因此,静态方法不能访问和修改类的状态。

实际上,您使用静态方法来定义在类中具有某些逻辑关系的实用方法或组函数。

要定义静态方法,您可以使用 @staticmethod 装饰器:

class className:
 @staticmethod
 def static_method_name(param_list):
   pass

要调用静态方法,您可以使用以下语法:

className.static_method_name()

魔术方法

python 中的魔术方法是名称以双下划线开头和结尾的特殊方法。魔术方法不是设计给我们直接调用的,而是系统在某些时候会在内部调用。

_str_

_str()_ 方法将在相应类的实例转换为字符串或用作 print() 函数的参数时调用。

class Segitiga:
 
 def __init__(self, a, t):
   self.alas = a
   self.tinggi = t
 
 def __str__(self):
   luas = 0.5 * self.alas * self.tinggi
   return f'segitiga (alas={self.alas} tinggi={self.tinggi} luas={luas})'
 
# create an instance
a = Segitiga(10, 10)
b = Segitiga(20, 10)
print(a)
print(b)
segitiga (alas=10 tinggi=10 luas=50.0)
segitiga (alas=20 tinggi=10 luas=100.0)

运算符重载

运算符重载是一种技术,我们将在其中管理或定义类的行为,以及它如何与各种运算符交互。

要查看 Python 的运算符重载操作,请启动 Python 终端并运行以下命令:

class Angka:
 def __init__(self, angka):
   self.angka = angka
 
 def __add__(self, objek):
   return self.angka + objek.angka

x1 = Angka(10)
x2 = Angka(20)
 
print(x1 + x2)

// result
30

超级()

Python 还有一个 super() 函数,可以让子类继承父类的所有方法和属性:

class Student(Person):
 def __init__(self, fname, lname):
 super().__init__(fname, lname)

通过使用 super() 函数,您不必使用父元素的名称,它会自动从其父元素继承方法和属性。

添加属性

class Student(Person):
 def __init__(self, fname, lname):
   super().__init__(fname, lname)
   self.graduationyear = 2019

在下面的示例中,2019 年应该是一个变量,并在创建学生对象时传递给学生类。

多重继承

在python编程语言中,一个类可以继承多个不同的父类。继承多个类的能力称为多重继承。

我们简单地定义每个父类,用括号 () 括起来,并用逗号 (,) 分隔。

class Parent1:
 pass
 
class Parent2:
 pass
 
class Turunan(Induk1, Induk2):
 pass

在上面的示例中,Child 类成为 Parent1 类和 Parent2 类的“子类”。

方法解析顺序

所以在多重或多级继承的场景下,第一个被调用的属性/函数来自它自己的类。如果没有找到,就从第一个父类开始。如果没有找到,则从第二个父类开始,依此类推。

所以在多重或多级继承的场景下,第一个被调用的属性/函数来自它自己的类。如果没有找到,就从第一个父类开始。如果没有找到,则从第二个父类开始,依此类推。

特别是对于多重继承,父类的顺序是从左到右。所以派生的第一个类是最左边的类,然后是右边的类,依此类推。

此方法的顺序称为方法解析顺序 (MRO)。

附录:方法覆盖:https://www.edureka.co/blog/method-overloading-and-overriding-in-java/

推荐书单

《PyTorch深度学习简明实战 》

本书针对深度学习及开源框架——PyTorch,采用简明的语言进行知识的讲解,注重实战。全书分为4篇,共19章。深度学习基础篇(第1章~第6章)包括PyTorch简介与安装、机器学习基础与线性回归、张量与数据类型、分类问题与多层感知器、多层感知器模型与模型训练、梯度下降法、反向传播算法与内置优化器。计算机视觉篇(第7章~第14章)包括计算机视觉与卷积神经网络、卷积入门实例、图像读取与模型保存、多分类问题与卷积模型的优化、迁移学习与数据增强、经典网络模型与特征提取、图像定位基础、图像语义分割。自然语言处理和序列篇(第15章~第17章)包括文本分类与词嵌入、循环神经网络与一维卷积神经网络、序列预测实例。生成对抗网络和目标检测篇(第18章~第19章)包括生成对抗网络、目标检测。

本书适合人工智能行业的软件工程师、对人工智能感兴趣的学生学习,同时也可作为深度学习的培训教程。

作者简介:

日月光华:网易云课堂资深讲师,经验丰富的数据科学家和深度学习算法工程师。擅长使用Python编程,编写爬虫并利用Python进行数据分析和可视化。对机器学习和深度学习有深入理解,熟悉常见的深度学习框架( PyTorch、TensorFlow)和模型,有丰富的深度学习、数据分析和爬虫等开发经验,著有畅销书《Python网络爬虫实例教程(视频讲解版)》。

购买链接(新书限时5.5折):https://item.jd.com/13528847.html

精彩回顾

《Pandas1.x实例精解》新书抢先看!

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

 

微信搜索关注《Python学研大本营》

访问【IT今日热榜】,发现每日技术热点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值