首页 > 编程语言 >Java开发者的Python快速进修指南:面向对象进阶

Java开发者的Python快速进修指南:面向对象进阶

时间:2023-11-25 19:46:14浏览次数:53  
标签:__ Java 进阶 Python self def name

在上一期中,我们对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,self,def,name
From: https://www.cnblogs.com/guoxiaoyu/p/17837435.html

相关文章

  • 聪明办法学python
    一、输入输出在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出:函数依次打印每个字符串,遇到逗号“,”会输出一个空格print('Thequickbrownfox',......
  • pythonDay16
    wraps装饰器补充 有参函数补充,特殊情况 有参函数装饰器,登录功能当中当账号密码来源于不同地方时 有参函数装饰器有语法糖(解决方案一,但比较复杂)有语法糖的解决方案二 有参装饰器的模板 什么是可迭代对象、什么叫迭代器,如何用 迭代器如何取值 for循环也可以......
  • python学习笔记-websocket介绍
    一、websocket介绍概述-http,socket实现,短链接,请求响应-websocket,socket实现,双工通道,请求响应,推送socket创建连接,不断开二、websocket握手过程分析socket入手-服务端(socket服务端)1、服务端开启socket,监听IP和端口3、允许连接*5、服务端接收特殊值【加密sha1,特殊值,magic......
  • 聪明办法学Python_task2_11.22-11.26
    聪明办法学Python_task2_11.22-11.26聪明办法学Python_task2_11.22-11.261.task03:数据类型和操作1.1常用基本类型1.2常用内置常数1.3常用内置运算符1.4逻辑运算1.5isinstance()2.task04变量与函数2.1变量2.1.1变量命名规则2.1.2多变量赋值2.2函数......
  • 聪明办法学python-task034
    python要点conda![1700559481851](C:\Users\25322\Documents\WeChatFiles\wxid_xc71h7t6nm2i22\FileStorage\Temp\1700559481851.png)注释单行注释以#开头多行注释可以用多个#号,还有'''和""".程序员最讨厌的10件事:0:别人的代码不写注释​......
  • Java 中如何解决跨域问题
    文章目录背景一、什么是跨域?为什么会出现跨域二、Java实现跨域方式2.1、返回新的CorsFilter(全局跨域)2.2、重写WebMvcConfigurer(全局跨域)2.3、使用注解(aa局部跨域)2.4、手动设置响应头(局部跨域)2.5、使用自定义filter实现跨域2.6、SpringCloudGateway跨域配......
  • 数据结构之优先队列(java)
    一:概述队列的特点是:先进先出(FIFO).入队列,将元素置于队尾;出队列,队头元素最先被移出:优先队列不遵循先入先出的原则,而是分两种情况。最大优先队列,无论入队顺序如何,都是当前最大的元素优先出队最小优先队列,无论入队顺序如何,都是当前最小的元素优先出队。例如有一个最大优先队列,其中的......
  • 基于python的计算机网络在线考试系统-计算机毕业设计源码+LW文档
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本基于python的计算机网络在线考试系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员......
  • python021餐厅点餐系统-计算机毕业设计源码+LW文档
    一、课题简介在信息技术逐渐渗入到生活各个方面的今天,互联网在我们的生活中扮演着越来越重要的角色。现在信息化技术不仅可以提高我们的工作效率,而且能有效的规避错误风险,节约人力成本。美食行业现如今也越来越利用信息化技术来提高点餐效率和质量,餐厅点餐管理系统现在也越来越被......
  • 基于python的旅游景点推荐系统-计算机毕业设计源码+LW文档
    摘要 随着科技和网络的进步,计算机技术与网络、生活贴和的更加紧密。需要依靠客户端的单机系统逐渐被淘汰,利用互联网可以处理大量数据的新型系统如雨后春笋般迅速发展起来。这类系统和信息化时代的同步发展对传统的办公管理方式造成了很大的压力。当今时代,信息数据是一切的根本,是......