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

Java开发者的Python快速进修指南:面向对象--高级篇

时间:2023-11-26 21:11:50浏览次数:28  
标签:Java name Python self -- def 属性

首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是有专门的方法来实现。最后,我们将简单地实现一下单例模式,这样面向对象章节就告一段落了。

封装(Encapsulation)

封装是指将数据和方法封装在一个类中。在Python中,我们可以通过属性和方法来实现封装。属性可以通过getter和setter方法来访问和修改,而方法可以在类的内部进行访问和使用。然而,与Java不同的是,虽然方法在Python中是可以调用的,但Java不允许。另外,属性也有一些区别,如果属性以双下划线开头,并且没有声明属性,将无法直接访问。除非你动态赋值,那么将失去封装的作用。

使用双下划线开头的属性是私有属性,下面是一个简单的示例代码:

class Person:
    def __init__(self, name, age):
        self.__name = name    # 
         
    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

person = Person("xiaoyu")
print(person.get_name())    # 输出:xiaoyu

我们都是学习Java的,所以对于getter和setter方法的使用应该是基本常识了。记住在Python中,我们使用双下划线来定义私有属性,但实际上这只是一种约定,Python并没有真正的私有属性概念。我们可以通过一些特殊的方式来访问和修改私有属性,但这违背了封装的原则,不建议直接这样做。

反射(Reflection)

反射是一种强大的编程技术,它使得在运行时可以动态地获取和修改对象的属性和方法。在Python中,我们可以利用内置的getattr()、setattr()和hasattr()等函数来实现反射的功能。通过反射,我们可以在运行时根据需要获取或修改对象的属性和方法,从而实现更灵活和动态的编程。不过,我还是有原则的,毕竟Java作为一种商业生态体系成熟的编程语言,在各个领域都有着强大的应用和支持,这是其他语言所无法比拟的。

下面是一个简单的示例代码:

class MyClass:
    def __init__(self, name):
        self.name = name

    def hello(self):
        print("Hello, {}!".format(self.name))

    def dance(self):
        print("dance, {}!".format(self.name))

    def cmd(self):
        method_name = input("====>")
        if hasattr(obj, method_name):
            method = getattr(obj, method_name)
            method()  


obj = MyClass("xiaoyu")
obj.cmd()

这样就可以获取到方法然后去实现反射了,我就不演示setattr了,自行演示吧。

image

单例模式(Singleton)

单例模式是一种常用的设计模式,它可以确保一个类只有一个实例,并且提供一个全局访问点,方便其他对象对该实例进行调用。在Python中,我们可以通过使用模块级别的变量来实现单例模式,这种方式非常简洁和高效。

下面是一个简单的示例代码,展示了如何在Python中实现单例模式:

class Singleton:
    _instance = None

    @classmethod
    def get_instance(cls):
        if not cls._instance:
            cls._instance = cls()
        return cls._instance
        
s1 = Singleton.get_instance()
s2 = Singleton.get_instance()

print(s1 is s2)  # 输出: True

与Java相似,Python中也可以使用classmethod装饰器来实现方法,只是在Python中我们称之为装饰器而非注解。

另外,Python中也有一种类似于Java中常用的stream流处理for循环的高级用法,只不过在Python中这种写法是倒着的。所以人们称之为字典推导或列表推导。为了方便记忆,我一直称之为推倒。

student = {
    "name": "xiaoyu",
    "age": 18
}

[print(key + ": " + str(value)) for key, value in student.items() if key == "name"]
# 输出 name: xiaoyu

总结

在今天的课上,我们深入讨论了封装、反射和单例模式这几个重要的概念。我不想过多地赘述它们的细节,但是请大家务必记住它们的基本语法规则,因为这也是面向对象章节的结束。我希望大家能够牢牢掌握这些知识点,为未来的学习打下坚实的基础。

标签:Java,name,Python,self,--,def,属性
From: https://www.cnblogs.com/guoxiaoyu/p/17839851.html

相关文章

  • 2023-2024-1 学号20231318《计算机基础与程序设计》第九周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第九周作业这个作业的目标自学教材《计算机科学概论》第10、11章以及《C语言程序设计》第8章并完成云班课测试。作业正文2023-2024-1学号202......
  • 软件工程读后感7-代码阅读方法与实践1
    最近,我阅读了代码阅读方法与实践的一部分。有时,阅读代码是一件不得不去做的事。有些时候,阅读代码也许是为了了解程序是如何工作的。您阅读代码可能是将代码作为一种文献。每种原因的代码阅读都有自己的一套技术,强调不同方面的技能。过去,我对于为什么以及如何阅读代码的理解不够深......
  • 学习感悟
      进入大学,进一步学习了计算机这一门课程,对计算机有了更深刻的学习和了解。通过在这半个学期间对计算机的学习,我确切感受到了自身的提高,感谢老师的精彩授课,他们让我受益匪浅。在此期间对计算机的学习,了解很多信息技术,主要有理论学习和实践学习,在这半学期收获颇丰,主要有一下几......
  • Scrum 冲刺——Day 2
    作业摘要作业所属课程所属课程链接作业要求团队作业4——项目冲刺之Scrum冲刺团队Github仓库链接Github链接作业目标通过短期内、连续、快速冲刺,团队成员实现的各自目标1站立会议1.1当天站立会议照片1.2站立会议纪要-Day2成员姓名昨天已......
  • 软件性能测试与实践
    一、性能测试基础1.1性能测试的场景1.1.1业务场景:分析业务流程,找出性能场景1.1.2测试场景:模拟性能场景,构造多个测试场景,得到测试结果,并分析得到测试结论。1.1.3单场景:单个业务场景,测试场景下性能指标最大TPS,平均响应时间,和吞吐量。1.1.4.混合场景:设计多个业务流程,并给予不同......
  • 学期2023-2024-1 20231409 《计算机基础与程序设计》第九周学习总结
    学期2023-2024-120231409《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第九周作业这个作业的目标《计算机科学概论》第10、11章《C语言程序设计》第......
  • Qt导出与加载dll
    先开篇,后期更新整理 1、Qt插件开发-夕西行-博客园(cnblogs.com)2、Qt插件开发方式-夕西行-博客园(cnblogs.com)2、Qt插件开发-夕西行-博客园(cnblogs.com) ......
  • ARM推出Cortex-M85的小弟Cortex-M52, 集低功耗,低成本和单片机AI于一身
    Cortex-M52特色:1、基于ARMv8.1-M架构的内核已经有M55和M85.新出的M52是采用ArmHelium技术的最小处理器,可提供出色的低功耗,为物联网提供低成本和高性能AI技术。2、Cortex-M52专为需要提高数字信号处理和机器学习性能的AIoT应用而设计,而无需专用DSP和机器学习加速器的成本开......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.26)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......