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

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

时间:2023-11-26 21:31:37浏览次数:37  
标签:__ 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://blog.51cto.com/StudiousXiaoYu/8572876

相关文章

  • Java开发者的Python快速进修指南:面向对象--高级篇
    首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是有专门的方法来实现。最后,我......
  • 代码随笔-Python练习之读取本地文件
    1importre2importrequests34#读取本地的xml文件5withopen('.\lol.txt','r',encoding='utf-8')asf:6forlineinf:7if'"instance_id"'inline:8start_index=line.fi......
  • Java基于springboot+vue开发服装商城小程序
    还可以改成其他商城哦。主要功能:用户可以浏览商品和特价商品,加入购物车,直接下单支付,在我的个人中心里可以管理自己的订单,收货地址,编辑资料等。管理员可以发布商品,上下架商品,处理订单。 演示视频:小程序https://www.bilibili.com/video/BV1rM411o7m4/?share_source=copy_web&vd_......
  • Java零基础入门-大数
    前言在日常开发中,常常会涉及到处理大数字的需求,如大整数运算、加密算法等。Java作为一门面向对象的编程语言,其内置类库中提供了BigInteger和BigDecimal类,可以方便地进行大数字的运算和处理。本文将介绍Java中BigInteger类的使用,帮助零基础的读者快速学习大数字的处理。摘要本文......
  • 通过Java和ECDSA生成X509版本的证书
    1.创新maven项目导入相关依赖<dependencies><dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.70</version></depe......
  • Python变量和常量
    【一】注释语法【1】什么是注释注释就是就是对代码的解释说明,注释的内容不会被当作代码运行【2】为什么要注释增强代码的可读性【3】如何使用注释代码注释分单行和多行注释1、单行注释用#号,可以跟在代码的正上方或者正后方2、多行注释可以用三对双引号""""""【4】......
  • docker搭建elasticsearch并使用python连接
    title:docker搭建elasticsearch并使用python连接banner_img:https://cdn.studyinglover.com/pic/2023/10/0863cb015e8d69fbce68ebe57bea96d8.jpgdate:2023-10-921:48:00categories:-踩坑docker搭建elasticsearch并使用python连接搭建创建一个docker网络dockernetwo......
  • Java 系统学习 | windows 环境安装 java
    学习语言,首先搭建环境。当前最新是Java21,本篇安装17版本。一、下载进入官网OracleDevelopers开发语言选择JavaDownloads选择JDK选择windows环境的JDK17下载exe文件即可想要其它老版本选择archive二、安装配置双击下载的exe......
  • 供应链设施选址模型——Python实现
    选址问题是运筹学中非常经典的问题。选址问题是指在确定选址对象,选址目标区,成本函数以及存在何种约束条件的前提下,以总物流成本最低或总服务最优或社会效益最大化为总目标,以确定物流系统中物流节点的数量、位置,从而合理规划物流网络结构。设施选址问题(FacilityLocationProblem)自......
  • GPU部署llama-cpp-python(llama.cpp通用)
    title:GPU部署llama-cpp-python(llama.cpp通用)banner_img:https://cdn.studyinglover.com/pic/2023/08/a5e39db5abf0853e6c456728df8bd971.jpgdate:2023-8-623:01:00tags:-踩坑GPU部署llama-cpp-python(llama.cpp通用)通用流程我们的安装平台是Ubuntu20.04,Python3.......