Python初体验(2)-java与python的差异(面向对象)

2023-11-03

一.类class

在python中所有类也都是默认继承自一个最终基类object

1.构造函数、成员函数、成员变量、局部变量

这几个概念在java中有,在python中也是类似的逻辑,构造函数的函数名是固定的__init__,所有成员变量都写在这个初始化函数中。这个构造函数和java中的有不少区别,这里不详细展开。

类中构造函数和所有成员函数的形参的第一个位置都有一个固定参数,这个参数代表当前对象的引用,像是java中的this,但是通过对象调用函数的时候,不管这个参数,只传需要的实参

class Person:

    def __init__(self,name,age):    #构造函数

        self.name = name    #与java不同,python的成员变量写在构造函数

        self.age = age

    def introduce(this):    #成员函数

         template = '我的名字是'     #局部变量

         print(template,this.name)   #虽然name是成员变量,但是必须用this.的形式使用

wpw = Person('吴大维',18)

wpw.introduce()

2.类变量、类函数、静态函数

如果像java一样写成员变量,会出现不一样的情况。在class中直接定义的变量,python中叫做类变量。

通过类调用的时候,像是java中的静态变量。

通过对象实例调用的时候,像是成员变量,python的类变量并不是由所有对象共享。

class Person:

    appearance = 60    #类变量

Person.appearance = 70

wpw = Person()    #实例化后,这个对象就有了自己的appearance变量

print(wpw.appearance)     #70

wpw.appearance = 120

print(wpw.appearance)     #120

print(Person.appearance)     #70   

    #思考:在class中修改和调用类变量,该怎么做

类函数,用@classmethod修饰符,长得和java中的注解一样。

类函数可以通过类名调用类函数,类函数无法访问对象实体变量,可以访问类变量。

类函数的形参中第一个参数cls,表示该类的一个实例

python中还有静态函数,@staticmethod,静态函数与类函数的区别是,静态函数不在形参中的得到类本身,也无法访问类变量

这两个东西使用起来很像java中的静态函数static

二.访问权限

python中函数和变量默认都是public的,通过变量的特殊命名格式来设置protect和private.

以单下划线开头命名,protected类型

以双下划线开头命名,private类型

python中内置了一种方式来实现java中set和get的设计模式

class Perosn:

    def __init__(self,name,age):

        self.__name = name    #私有变量

        self.__age = age

    @property    #用这个装饰器来声明一个name函数,对象调用的时候相当于get

    def name(this)

         return this.__name

    @name.setter    #@property又创建了另一个装饰器@name.setter,相当于set

    def name(this,name):

          this.__name = name

wpw = Person('吴大维',18)

print(wpw.__name)    #AttributeError: 'Person' object has no attribute '__name'

wpw.name = '吴小维'    #相当于使用了wpw.name('吴小维')函数,set

print(wpw.name)    #相当于使用了wpw.name()函数,get

三.动态绑定函数与属性

def job(n):

    print('工作',n,'小时')

wpw = Person('吴大维',18)

wpw.iq= 99    #类中本没有这个属性,单独为这一个对象动态绑定一个新属性

wpw.work = job     #为这个对象动态绑定一个新的函数

wpw.work(8)

四.继承与多态

1.多继承

在python中,不存在interface,python像C++一样可以多继承

class ZhiZhangErZhong:

    activity = "社会摇"

class Student(Person,ZhiZhangErZhong):

    score = 60

    def __init__(self,name,age,studentId):

        super().__init__(name, age)    #父类的构造函数

        self.studentId =studentId

    def introduce(this):    #重写父类的函数

        print('我的名字是',this._name,'我的成绩是',this.score,'课间活动',this.activity)

多继承会对代码读写带来麻烦,于是采用mixin设计模式,采用统一的命名规范(如ZhiZhangErZhongMixIn),告诉读代码的人这里不是 is-a 的关系,而是一种组合进来的功能。

python中有抽象方法@abstractmethod

2.重写与重载

python中有重写的概念,和java一样,但是python中没有和java一样的重载

思考:当我在读一段陌生的python代码的时候,我该如何知道一个对象是什么类的对象,有哪些属性,有哪些方法,例如这个里面的dataset,要一层一层的的去找return的源码吗

dataset = datasets.fetch_mldata("MNIST Original")
features = numpy.array(dataset.data, 'int16') 
labels = numpy.array(dataset.target, 'int')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python初体验(2)-java与python的差异(面向对象) 的相关文章

  • 在Python中将月份和年份的列合并为季度和年份的列

    我有一个数据框 df Month 1 8 Year 2015 2020 df pd DataFrame data df df 想要将其转变为新列 期望的输出 df Month 1 8 Year 2015 2020 Quarter Q1201
  • java应用程序,线程在终止MySQL连接后挂起

    我有一些工作线程正在运行 其中包括 MySQL 和 mysql connector java 5 1 20 当我杀死一些 SQL 语句 使用 mysql 客户端的kill 连接id 时 java线程挂起 这应该抛出一些异常 jstack 打
  • Java SFTP使用JSch上传,但如何覆盖当前文件?

    我正在尝试使用 JSch 通过 SFTP 将两个文件上传到服务器 如果目录为空 则上传文件效果很好 但我想一遍又一遍地上传相同的文件 只需更改内部的 id 但我不知道如何执行此操作 JSch 中有一些名为 OVERWRITE 的静态参数 但
  • 识别包含本机方法实现的库文件/源

    如何识别包含本机方法实现的库文件 Ex public native String intern 我在哪里可以找到实施 source code of String intern 方法 找到了答案String intern 与快速谷歌搜索 ht
  • 识别文本中的多个类别和相关情感

    如果您有一个文本语料库 如何识别所有类别 来自预定义类别列表 以及与之相关的情绪 正面 负面写作 我将在 Python 中执行此操作 但现阶段我不一定要寻找特定于语言的解决方案 让我们用一个例子来看看这个问题 试图澄清我的问题 如果我有一整
  • python请求ssl握手失败

    每次我尝试这样做 requests get https url 我收到这条消息 import requests gt gt gt requests get https reviews gethuman com companies Trace
  • 如何忽略 Sentry 捕获中的某些 Python 错误

    我已将 Sentry 配置为捕获 Django Celery 应用程序中的所有错误 它工作正常 但我发现一个令人讨厌的用例是当我必须重新启动我的 Celery 工作人员 PostgreSQL 数据库或消息服务器时 这会导致数千种各种 无法访
  • Python httplib 和 POST

    我目前正在使用别人编写的一段代码 它用httplib向服务器发出请求 它以正确的格式提供所有数据 例如消息正文 标头值等 问题是 每次尝试发送 POST 请求时 数据都在那里 我可以在客户端看到它 但没有任何内容到达服务器 我已经阅读了库规
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • 如何让 Python 生成器返回 None 而不是 StopIteration?

    我使用生成器在列表中执行搜索 如下简单示例 gt gt gt a 1 2 3 4 gt gt gt i for i v in enumerate a if v 4 next 3 只是为了稍微说明一下示例 与上面的列表相比 我使用的列表要长得
  • JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中已弃用。应该用什么来代替呢?

    JdbcTemplate 中的 queryforInt queryforLong 方法在 Spring 3 2 中已弃用 我无法找出为什么或什么被认为是使用这些方法替换现有代码的最佳实践 典型方法 int rowCount jscoreJd
  • Maya python 连接选择的属性

    我一直在尝试制作一个简单的脚本 它将采用两个视口选择 然后基本上将第二个视口的旋转连接到第一个 我不确定如何正确地从视口选择中为对象创建变量 这是我的尝试 但不起作用 import maya cmds as cmds sel cmds ls
  • Python - 将列表作为参数传递给 SQL,以及更多变量

    我试图在 python 3 6 中将未知数量的参数传递给 SQL Server 这是我使用 pypyodbc 的代码 cursor cnxn cursor theargs 1033286869 1053474957 1063654630 1
  • allure2 侦听器在控制台中输出步骤

    我正在使用 Allure2 和 TestNG 我想编写自己的侦听器 在控制台输出中打印 Steps 我在 allure 中看到了 StepLifecycleListener 接口 但我无法在 TestNg 中实现此侦听器 有什么指点吗 Ov
  • JPA2+Hibernate 3.6.0 中的 JTA 还是 LOCAL 事务?

    我们正在重新思考我们的技术堆栈 以下是我们的选择 由于应用程序的复杂性等 我们不能没有 Spring 和 Hibernate 我们还从 J2EE 1 4 迁移到 Java EE 5 技术栈 Java EE 5 JPA 2 0 我知道Java
  • GridLayout 中的 JLabel

    如何添加JLabel出于GridLayout 我有一个 8x8 网格布局 Container content getContentPane content setLayout new GridLayout 8 8 2 2 for int f
  • 解决SecurityException:权限拒绝:启动意图。我需要什么许可?

    我想从应用程序打开游戏商店 在三星手机上还好 但在一加手机上却失败了 我不知道在哪里alibaba来自 真奇怪 异常 java lang SecurityException 权限拒绝 启动意图 act android intent acti
  • 导入错误:无法导入名称

    我有一个名为 google translate python 的库 https github com terryyin google translate python https github com terryyin google tra
  • 从 Java 程序中获取局部变量的名称和类型

    这是我正在尝试的代码 JavaCompiler compilerA ToolProvider getSystemJavaCompiler int resultA compilerA run null null null Users a Do
  • Tomcat 中 JNDI 的 Java Mail API 配置文档

    我花了几天时间弄清楚如何通过 JNDI 在 Tomcat 中配置 javax mail Session有认证 现在我明白了 但只是在深入研究代码之后 这次我看到了有史以来最糟糕的代码 javax mail Service connect S

随机推荐

  • MySQL常见的面试经典108题

    目录 1 MySQL 索引使用有哪些注意事项呢 2 MySQL 遇到过死锁问题吗 你是如何解决的 3 日常工作中你是怎么优化SQL的 4 说说分库与分表的设计5 InnoDB与MyISAM的区别6 数据库索引的原理 为什么要用 B 树 为什
  • Binutils-2.23.2

    http lamp linux gov cn Linux LFS 6 2 chapter06 binutils html http davidgao github io LFSCN chapter06 binutils html Linux
  • Linux命令56问

    目录 2 查看CPU性能的指令 vmstat 3 查看内存使用情况的指令 free 4 查看硬盘使用情况的指令 df 5 查看网络IO情况的指令 ifstat 6 查看机器已建立的TCP连接的指令 Linux常用命令 8 cd命令的作用 9
  • 1-Kubernetes基础入门体系架构学习(一)

    0x00 基础简述 Borg 系统 Kubernetes 系统 1 发展经历 2 简要介绍 3 系统架构 0x01 组件详述 1 Kubernetes Master 2 Kubernetes Node 3 Kubernetes 插件 4 小
  • 【计算机网络】湖科大微课堂笔记 p64-66 TCP的运输连接管理:TCP的连接建立与释放、TCP报文段的首部格式

    文章目录 TCP的运输连接管理 TCP的连接建立 小结 一些例题 TCP的运输连接管理 TCP的连接释放 TCP报文段的首部格式 小结 TCP的运输连接管理 TCP的连接建立 TCP的连接建立要解决以下三个问题 TCP使用 三报文握手 建立
  • Flutter 沉浸式状态栏 安全区域 SafeArea以外的刘海屏 设置颜色

    白色 黑 import dart io import package flutter services dart void main runApp MyApp 白色 if Platform isAndroid 以下两行 设置android状
  • OSPF域内路由

    划分区域之后有什么好处呢 OSPF域内路由 属于同一个区域内的路由 OSPF划分区域的要求 基于链路 一个链路肯定是属于一个区域的 Router LSA 类LSA Network LSA 类LSA 区域内部都会有 类LSA和 类LSA 拓扑
  • 下载IDEA-2020.1

    文章目录 一 下载IDEA 2020 1 一 下载老师发的IDEA 2020 1安装包 二 在百度上搜索官网进行下载 1 网址 https www jetbrains com idea 2 单击 Download 二 安装IDEA 2020
  • 图片变成黑白

    实例
  • 小程序开发环境搭建

    工具下载 下载 访问https mp weixin qq com 进入 小程序界面 点击文档 进入小程序文件界面 如果要开发小程序可按照文档指示注册开发账号 在文档目录中找到安装开发工具 前往开发者工具下载界面即可下载开发工具 选择对应版本
  • nginx+upsync+consul实现动态的负载均衡

    1 什么是动态负载均衡 传统的负载均衡 如果Upstream参数发生变化 每次都需要重新加载nginx conf文件 因此扩展性不是很高 所以我们可以采用动态负载均衡 实现Upstream可配置化 动态化 无需人工重新加载nginx con
  • android软件静态分析系统的设计与实现,基于静态分析的安卓自动化测试优化设计与实现...

    摘要 随着移动互联网的飞速发展 智能手机软件迅速地融入了人们生活的各个方面 而作为智能手机市场中占额超过80 的Android操作系统 在设备数量和应用软件数量上都在快速地增长 为了保证Android应用软件功能的正确性和可靠性 需要对其进
  • sqlserver日期函数大全

    一般存入数据库中的时间格式为yyyy mm ddhh mm ss 如果要转换为yyyy mm dd 的日期格式 可以使用convert函数 下面是sqlserver帮助中关于convert函数的声明 CONVERT data type le
  • win10 远程桌面服务不见了解决办法

    由于员工操作错误 导致某杀毒软件把remote desktop services服务整个搞不见了 其他服务什么的都在 应该开的都开了 查了N多网上CTRL V后 发现注册表中termservice消失了 然后把其他版本相同的win10的te
  • 【微信篇】取证遇到微信昵称、微信号、微信账号、微信ID一次性区分清楚

    微信篇 取证遇到微信昵称 微信号 微信账号 微信ID一次性区分清楚 区别于 看得见 看不见 之间 suy 文章目录 微信篇 取证遇到微信昵称 微信号 微信账号 微信ID一次性区分清楚 一 微信账号 ID 永久唯一性 二 微信号 短期唯一性
  • 微信小程序-分享页面到微信群或者好友携带分享者身份信息

    原文链接 http www smallerpig com 1202 html utm source tuicool utm medium referral 当用户在群聊中点击小程序的分享卡片 开发者可获取群 ID 和群名称 更好地针对群场景
  • Kafka三款监控工具比较

    Kafka三款监控工具比较 转 在之前的博客中 介绍了Kafka Web Console这 个监控工具 在生产环境中使用 运行一段时间后 发现该工具会和Kafka生产者 消费者 ZooKeeper建立大量连接 从而导致网络阻塞 并且这个 B
  • Unreal Engine 4.20 Release Notes

    https docs unrealengine com en US Builds 4 20 Unreal Engine 4 20 Release Notes What s New Unreal Engine 4 20 delivers on
  • c++学习,引用-- 黑马笔记

    1 引用的基本使用 作用 给变量起别名 语法 数据类型 别名 原名 注意事项 引用必须初始化 引用初始化之后不可以改变 样例 include
  • Python初体验(2)-java与python的差异(面向对象)

    一 类class 在python中所有类也都是默认继承自一个最终基类object 1 构造函数 成员函数 成员变量 局部变量 这几个概念在java中有 在python中也是类似的逻辑 构造函数的函数名是固定的 init 所有成员变量都写在这