🔥🔥Java开发者的Python快速进修指南:面向对象进阶
在上一期中,我们对Python中的对象声明进行了初步介绍。这一期,我们将深入探讨对象继承、组合以及多态这三个核心概念。不过,这里不打算赘述太多理论,因为我们都知道,Python与Java在这些方面的主要区别主要体现在语法上。例如,Python支持多重继承,这意味着一个类可以同时继承多个父类的属性和方法,而Java则只支持单一继承。另一个值得注意的差异是对super关键字的使用。在Java中,我们经常需要显式地使用super来调用父类的构造器,而在Python中,这一步骤是可选的。如果没有指定,Python会自动调用父类的构造器,这让代码看起来更加简洁。
当然,我们这里不会举出太多复杂的例子来让大家头疼。毕竟我们的目标是理解和应用这些概念,而不是准备考试。我们将通过一些简单直观的例子,帮助大家清晰地把握Python在继承、组合和多态方面的特点和优势。
对象的继承
Python中的继承是一种用于创建新类的机制,新类可以继承一个或多个父类的特性。在面向对象编程中,和Java一样继承提供了代码复用的强大工具。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
# def __init__(self, name):
# super().__init__(name)
def speak(self):
return "Woof!"
# 使用
dog = Dog("Buddy")
print(dog.speak()) # 输出: Woof!
print(dog.name) # 输出: Buddy
不声明__init__默认使用super调用父类的构造器,如果你一旦声明了__init__那么记得显式的调用super,否则将无效
在Python中,多继承是一个强大的特性,允许一个类同时继承多个父类。下面是一个多继承的例子,来帮助你更好地理解这一概念:
class Father:
def __init__(self):
self.father_name = "Father's name"
def gardening(self):
return "I enjoy gardening"
class Mother:
def __init__(self):
self.mother_name = "Mother's name"
def cooking(self):
return "I love cooking"
class Child(Father, Mother):
def __init__(self):
Father.__init__(self)
Mother.__init__(self)
self.child_name = "Child's name"
def activities(self):
return f"{self.father_name} likes {self.gardening()} and {self.mother_name} likes {self.cooking()}."
# 使用
child = Child()
child.father_name = "father"
child.mother_name = "mom"
print(child.activities())
对象的组合
在Python中,我们可以在程序运行过程中根据需要向对象动态地添加新的行为或数据,这种方式为处理各种复杂和不可预见的编程情况提供了极大的便利。相比之下,Java由于其静态类型的特性,对于运行时的动态变化就显得有些束手束脚。在Java中,所有的属性和方法都必须在编译时明确定义。
class Printer:
def print_document(self, content):
return f"Printing: {content}"
class Scanner:
def scan_document(self):
return "Scanning a document"
class MultifunctionMachine:
pass
# 动态添加功能
mfm = MultifunctionMachine()
mfm.printer = Printer()
mfm.scanner = Scanner()
# 使用新功能
print(mfm.printer.print_document("Hello World")) # 输出: Printing: Hello World
print(mfm.scanner.scan_document()) # 输出: Scanning a document
pass 这个看似简单却不可忽视的关键字,我不太确定之前是否有提及。在Python的世界里,pass 是一种特别有趣的存在。想象一下,在编写代码时,我们常常会遇到一种场景:逻辑上需要一个语句,但此刻我们可能还没有准备好具体的实现,或者我们故意想留下一个空的代码块,以备将来填充。这时,pass 就像是一个灵巧的小助手,默默地站在那里,告诉Python解释器:“嘿,我在这里,但你可以暂时忽略我。”
多态
为了让大家更直观地理解多态,我准备了一个例子,相信通过这个实例,多态的概念会变得生动而明晰。在Python中,多态表现得非常直观,而且它与Java在这方面的处理几乎如出一辙。
class Animal:
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
def animal_speak(animal):
print(animal.speak())
# 使用
my_dog = Dog()
my_cat = Cat()
animal_speak(my_dog) # 输出: Woof!
animal_speak(my_cat) # 输出: Meow!
总结
在本期文章中,我们深入探讨了Python的对象继承、组合以及多态这三个核心概念。从继承的灵活性,如Python的多重继承和super关键字的使用,到组合中的动态属性添加,我们逐一解析了Python与Java在这些方面的相似之处和差异。通过具体的例子,我们展示了Python中多态的直观表现,强调了它与Java的相似性。这些讨论不仅帮助理解Python的对象模型,而且对比了Java和Python在面向对象编程方面的不同处理方式
🔥🔥Java开发者的Python快速进修指南:面向对象进阶的更多相关文章
- python(24)- 面向对象进阶
面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板 ...
- JAVA开发者的Golang快速指南
Golang作为Docker.Kubernetes和OpenShift等一些酷辣新技术的首选编程语言,越来越受欢迎.尤其它们都是开源的,很多情况下,开源是非常有价值的.深入学习阅Golang等源代码库 ...
- 针对Quant的Python快速入门指南
作者:用Python的交易员 (原创文章,转载请注明出处) 最近有越来越多的朋友在知乎或者QQ上问我如何学习入门Python,就目前需求来看,我需要写这么一篇指南. 针对整个vn.py框架的学习,整体 ...
- MessagePack Java 0.6.X 快速开始指南 - 安装
0.6.x 版本的 MessagePack 已经过期被淘汰了.如果你现在开始使用 MessagePack 话,请不要使用这个版本. 我们再这里保留 0.6.x 版本的内容主要用于参考用途. 最新的 M ...
- python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- python之旅:面向对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...
- python全栈开发-面向对象-进阶2
python_day_19 今日主要内容: 1.抽象类,接口类 2.多态 3.封装 1.抽象类,接口类 python 没有接口这个概念接口类,抽象类: 制定一个规范. 举个栗子:你的项目经理提一个需求 ...
- python全栈开发-面向对象-进阶
python_day_18 1,面向对象的三大特性是什么?继承,多态,封装2,什么是面向对象的新式类?什么是经典类?凡是继承object类都是新式类.凡是不继承object类都是经典类.3,面向对象为 ...
- 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...
- Java快速扫盲指南
文章转自:https://segmentfault.com/a/1190000004817465#articleHeader22 JDK,JRE和 JVM 的区别 JVM:java 虚拟机,负责将编译 ...
随机推荐
- asp.net core之日志
日志记录在应用程序开发中起着至关重要的作用,它可以帮助开发人员诊断和调试问题,同时也是监控和性能优化的重要工具.ASP.NET Core 提供了强大且灵活的日志记录功能,本文将详细介绍ASP.NET ...
- 用 Tensorflow.js 做了一个动漫分类的功能(一)
前言: 浏览某乎网站时发现了一个分享各种图片的博主,于是我顺手就保存了一些.但是一张一张的保存实在太麻烦了,于是我就想要某虫的手段来处理.这样保存的确是很快,但是他不识图片内容,最近又看了 mobil ...
- Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfs
目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明 Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改 Hi3798MV200 恩兔N2 NS ...
- 【技术积累】Linux中的命令行【理论篇】【九】
blkid命令 命令介绍 blkid命令是一个用于查看块设备属性的Linux命令.它可以识别和显示块设备的文件系统类型.UUID.LABEL.PARTUUID等信息. 命令说明 在Linux下可以使用 ...
- Unity UGUI的Scrollbar(滚动条)组件的介绍及使用
Unity UGUI的Scrollbar(滚动条)组件的介绍及使用 一.什么是Scrollbar组件? Scrollbar组件是Unity中UGUI系统提供的一种UI组件,主要用于在UI界面中提供滚动 ...
- 微信小程序隐私保护协议修改方法 uniapp
微信隐私保护协议指南 一天天没事闲的 01 在manifest.json 中添加一行 "__usePrivacyCheck__" : false 02 自定义一个弹窗组件 ...
- js获取当前月的天数
//取得本月天数(实际代码:) var now=new Date(); var d = new Date(now.getFullYear(),now.getMonth()+1,0); var days ...
- IDEA 配置桌面快捷方式
IDEA 配置桌面快捷方式 目录 IDEA 配置桌面快捷方式 1.下载idea.tar解压 2.配置快捷方式 3.为什么要存放在这个目录? 1.下载idea.tar解压 tar xf ideaIC-2 ...
- kubernates的集群安装-kubadm
kubernates的集群安装-kubadm 环境准备工作(CentOS) 准备三台或以上的虚拟机 停用防火墙 sudo systemctl stop firewalld sudo systemctl ...
- Ds100p -「数据结构百题」1~10
1.「一本通 4.6 例 1」营业额统计 原题来自:HNOI 2002 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger 拿出 ...