当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升。不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性。它使用了一些独特的关键字,如self和cls,这些不仅增强了代码的可读性,还提供了对类和实例的明确引用。正如Java,Python也依赖于对象和类的概念,允许我们通过定义类来创建和操作对象。尽管在表面上Python和Java在面向对象的实现上看似相似,但实际上,它们在细节处理上存在一些显著的差异。接下来,我们将探索这些差异,并深入了解它们在实际应用中的具体表现,以便更好地理解面向对象编程在不同语言中的独特风格和优势。

Python中的类声明

首先,你需要声明一个类。在Python中,这通常是通过使用class关键字来完成的。下面是一个简单的类声明的示例:

class MyClass:
myAttr = "类的属性"
def __init__(self, attribute):
self.attribute = attribute def my_method(self):
return f"Value of attribute is {self.attribute}"

关于上面的类声明你可能发现了attribute和myAttr属性不一样,不报错吗?这就是Python的特点:动态属性赋值。在Python中,不仅可以在类的初始化方法__init__中直接定义新的属性,还可以在对象创建之后的任何时刻动态地添加属性,这种做法在Java中会引发错误,但在Python中却是完全合法的,反映了其动态类型的本质。下面再详细说下。

在Java中,this关键字是隐式的,用于指代当前对象的实例,而在Python中,self必须显式声明并作为方法的第一个参数传递。

返回值里的f在这里表示格式化,它使得在字符串中直接嵌入表达式成为可能。Python会自动进行求值并将结果转换为字符串。

创建对象

一旦定义了类,就可以使用该类来创建对象。这是通过简单地调用类名并传递必要的参数来完成的。例如:

my_object = MyClass("Hello")
my_object.subAttr = "是子类的"
print(my_object.subAttr) #输出:是子类的
print(my_object.my_method()) # 输出:Value of attribute is Hello

虽然在Python中,self关键字需要显式地在方法定义中指出,但其实它的作用与Java中的this关键字相似,代表着方法所属的对象实例。在调用实例方法时,Python会自动将对象实例作为第一个参数传递给self,因此在正常使用实例方法时,我们无需显式地传递这个参数。例如,在调用my_object.my_method()时,my_object实例会自动作为self参数传递给my_method。这种机制确保了方法能够访问和操作所属对象实例的数据。

如果尝试直接通过类名来调用实例方法,如MyClass.my_method(),将会引发错误。这是因为没有提供必要的实例参数,导致self没有被正确初始化。要想通过类名调用方法,方法必须是类方法或静态方法。来看下

类方法和静态方法

在Python中,@classmethod和@staticmethod是两种常用的方法装饰器,它们分别用于定义类方法和静态方法。

其特点是第一个参数通常是cls,代表着类本身。这与实例方法中的self参数相似,但有一个重要的区别:cls参数指向类,而不是类的某个特定实例。类方法的一个限制是它们无法访问特定实例的属性,因为它们不与任何实例绑定。

class MyClass:
@classmethod
def my_class_method(cls):
# 可以访问类属性,如cls.some_class_attribute
return "这是一个类方法"

静态方法实际上是独立于类的实例和类本身的。静态方法不接收传统意义上的self或cls参数,这意味着它们既不能访问类的实例属性(即对象级别的数据),也不能访问类属性(即与类本身相关联的数据)。静态方法的这种特性使得它们更像是普通函数,但为了逻辑上的整洁和组织性,它们被放置在类的定义中。

class MyClass:
@staticmethod
def my_static_method():
return "这是一个静态方法"

总结

作为一名有着Java背景的开发者,你无疑已经习惯了Java那严格的类型系统和细致的访问控制机制。转向Python,你会发现一个截然不同的编程世界。Python的面向对象编程(OOP)方式为代码组织提供了更高的自由度和灵活性,这种变化可能会给你带来新鲜感,同时也是一个挑战。需要注意的是,Python的这种灵活性可能会导致更少的编译时错误检查。由于Python是一种解释型语言,很多错误只有在运行时才会被捕捉到。

🔥🔥Java开发者的Python快速进修指南:面向对象基础的更多相关文章

  1. JAVA开发者的Golang快速指南

    Golang作为Docker.Kubernetes和OpenShift等一些酷辣新技术的首选编程语言,越来越受欢迎.尤其它们都是开源的,很多情况下,开源是非常有价值的.深入学习阅Golang等源代码库 ...

  2. 针对Quant的Python快速入门指南

    作者:用Python的交易员 (原创文章,转载请注明出处) 最近有越来越多的朋友在知乎或者QQ上问我如何学习入门Python,就目前需求来看,我需要写这么一篇指南. 针对整个vn.py框架的学习,整体 ...

  3. MessagePack Java 0.6.X 快速开始指南 - 安装

    0.6.x 版本的 MessagePack 已经过期被淘汰了.如果你现在开始使用 MessagePack 话,请不要使用这个版本. 我们再这里保留 0.6.x 版本的内容主要用于参考用途. 最新的 M ...

  4. python抽象篇:面向对象基础

    1.面向对象概述 面向过程编程:根据操作数据的函数或语句块来设计程序的. 函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:数据和功能结合起来,用称为对象的东西包 ...

  5. Python面向过程和面向对象基础

    总结一下: 面向过程编程:根据业务逻辑从上到下的写代码-----就是一个project写到底,重复利用性比较差 函数式:将某些特定功能代码封装到函数中------方便日后调用 面向对象:对函数进行分类 ...

  6. Python快速入门

    Python快速入门 一.基础概要 命名:h.py Linux命令行运行:python h.py 注释.数字.字符串: 基本类型只有数字与字符串 #python注释是这样写的 ''' 当然也可以这样 ...

  7. Python学习之面向对象基础

    python的面向对象和以前学的c++,Java都是一般,大同小异,面向对象基础先谈谈类的构造,编写,属性和方法的可见性等等 1.定义类,创建和使用对象 #定义类 class Student(obje ...

  8. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  9. Java快速扫盲指南

    文章转自:https://segmentfault.com/a/1190000004817465#articleHeader22 JDK,JRE和 JVM 的区别 JVM:java 虚拟机,负责将编译 ...

  10. Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)

    Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...

随机推荐

  1. Cannot use v-for on stateful component root element because it renders multiple elements.

    <template name:trailerStars> <image v-for="yellow in yellowScore" src="../st ...

  2. Log4j的Maven依赖及其配置文件

    Maven配置 <!--Log4j依赖文件--> <dependency> <groupId>log4j</groupId> <artifactI ...

  3. 小议ml.NET机器学习与人机责任划分

    最近,特斯拉宣布召回110万辆车,名义上是纠正单踏板不良习惯,背后原因可能是这些车辆的电子控制单元存在缺陷,可能导致刹车失灵(潮州等交通事故至今没有定论).这个事件引起了人们对于机器学习技术和人机责任 ...

  4. Wow: 基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架

    领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 架构图 事件源 可观测性 OpenAPI (Spring WebFlux 集成) 自动注册 命 ...

  5. MongoDB索引操作和执行计划Explain()详解

    一.索引操作 说明,下面的内容举例时,以"dailyTrip"collection为例. 字段内容如下: { "_id" : ObjectId("63 ...

  6. VMware三种连接模式的区别

    安装了vm软件后,该软件会虚拟出两张虚拟网卡vmnet1和vmnet8 网卡在控制面板->网络和internet->更改适配器设置 三种网络连接模式: 桥接模式:使用主机的无线网卡或者有线 ...

  7. HTTP.SYS远程代码执行漏洞验证及其复现(CVE-2015-1635蓝屏洞)

    HTTP.SYS远程代码执行漏洞验证及其复现(CVE-2015-1635蓝屏洞) @ 目录 HTTP.SYS远程代码执行漏洞验证及其复现(CVE-2015-1635蓝屏洞) 漏洞概述 http.sys ...

  8. ImGui界面优化:使用图标字体、隐藏主窗口标题栏

    目录 使用图标字体 扩展:内存加载字体 隐藏主窗口标题栏 增加程序退出 改进HideTabBar 窗口最大化 总结 本文主要介绍ImGui应用中的一些界面优化方法,如果是第一次使用ImGui推荐从上一 ...

  9. ES13 中11个令人惊叹的 JavaScript 新特性

    前言 与许多其他编程语言一样,JavaScript 也在不断发展.每年,该语言都会通过新功能变得更加强大,使开发人员能够编写更具表现力和简洁的代码. 小编今天就为大家介绍ES13中添加的最新功能,并查 ...

  10. 低功耗引擎 Cliptrix 有什么价值

    在万物互联的时代,现代人已普遍接受电视.音箱等电器设备具备智能化能力,也是在这个趋势下,我们身边越来越多的iOT设备联网和交互成为刚需.但iot设备也面临到一些非常显著的痛点,例如iot设备的内存.处 ...