delstr函数python_Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...

## 多态

```python

OOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态

多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的,

以不变应万变,提高灵活性/扩展性

多态,一般都需要一个管理多态的方法,方法的函数就是类的对象,在方法中通过点语法,调用每个对象的那个相同的方法.

```## 封装:

```python

封装,即是隐藏类中的一些不能被外界访问的方法、属性,封装语法就是在名称前加双下划线即可。

为什么封装之后,外界无法访问?

python中,是通过变形的方式实现封装的,在名称带有双下滑线的变量名字前添加单下划线_类名实现的。意味着可以通过在封装的属性、方法前加_类名,但是一般不会这么做。#***变形仅在类的定义阶段发生一次 后续再添加的带有双下划线的任何属性都不会变形 就是普通属性***

@property:

通过property用于访问私有属性的值

@property#getter # 用于访问私有属性的值 也可以访问普通属性

defsalary(self):return self.__salary@salary.setter#用来设置私有属性的值 也可以设置普通属性

defsalary(self,new_salary):

self.__salary =new_salary

@salary.deleter#用来设置私有属性的值 也可以删除普通属性

defsalary(self):#print("can not delete salary!")

del self.__dict__["_Teacher__salary"]#del self.__salary#再对私有属性进行增删改查的时候,会自动调用上面对于的装饰的方法。

property的另一种使用场景 计算属性

什么是计算属性 一个属性 它的值不是固定死的 而是通过计算动态产生的

```## 内置函数__str, del,

```python

类中的__str__

该方法在object中有定义 默认行为 返回对象类型以及地址<__main__.person object at>在将对象转为字符串时执行

在print时也会执行__str__,否则无法打印#***注意:返回值必须为字符串类型***

子类可以覆盖该方法来完成 对打印内容的自定义

例:classPerson:def __init__(self,name,age):

self.name=name

self.age=age#将对象转换为字符串时执行

def __str__(self):print("str run")return "my name is %s , age is %s" %(self.name,self.age)

p=Person("rose",20)

str(p)#str run

print(p)#str run my name is rose , age is 20

类中__del__: 也称之为析构函数(构造反义词,从有到无)

当对象被删除前会自动调用 该方法

声明时候会删除对象?1.程序运行结束 解释器退出 将自动删除所有数据2.手动调用del 时也会删除对象#假设要求每一个person对象都要绑定一个文件

classPerson:def __init__(self,name,path,mode="rt",encoding="utf-8"):

self.name=name

self.file= open(path,mode,encoding=encoding)#读取数据的方法

defread_data(self):returnself.file.read()def __del__(self):print("del run!")

self.file.close()

总结:__del__该函数用于 在对象删除前做一些清理操作

```## 反射(反省):

```python

面向对象中的反省 指的是,一个对象必须具备,发现自身属性,以及修改自身属性的能力;

一个对象在设计初期,可能考虑不够周全后期需要删除或修改已经存在的属性, 和增加属性

反射就是通过字符串来操作对象属性

涉及到的方法:

hasattr 判断是否存在某个属性

hasattr(对象,"字符串"):判断是否有跟字符串同名的属性名

getattr 获取某个属性的值

getattr(对象,"字符串"):获取跟字符串同名的属性值/方法名,这时可以用变量接受,存放的就是属性值或者方法的地址。可以通过该变量执行该方法。

setattr 新增或修改某个属性

delattr 删除某个属性

例:classMY_CMD:defdir(self):

os.system("dir")defipconfig(self):

os.system("ipconfig")

cmd=MY_CMD()whileTrue:

name= input("请输入要执行的功能:")ifhasattr(cmd,name):

method=getattr(cmd,name)print(method)

method()else:print("sorry this method is not exists....!")

```## 动态导入模块

```python

直接写import称之为静态导入 但这建立在一个基础上:提前已经知道有这个模块

动态导入 指的是 在需要的任何时候 通过指定字符串类型的包名称来导入需要的模块importimportlib

mk=importlib.import_module(m_name)#m_name 是一个代表模块路径的字符串,如:"build_house.my_decoration.Light"

mk 即导入成功的模块"""该方式常用在框架中 因为框架设计者不可能提前预知后续需要的模块和类

```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java8用什么tomcat_Tomcat8+JDK8安装与配置

一&#xff0c;系统配置1.操作系统&#xff1a;win10 64位2.tomcat版本&#xff1a;Tomcat8 64位3.Java版本&#xff1a;JDK8 64位二&#xff0c;软件下载下载到本地后直接打开安装&#xff0c;修改存储目录&#xff0c;如图&#xff1a;2.2 Tomcat8下载&#xff0c;官网地址&…

逻辑回归python正则化 选择参数_吴恩达机器学习笔记(三)——正则化(Regularization)...

1.过拟合的问题(Over-fitting)如果我们有非常多的特征&#xff0c;我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0)&#xff0c;但是可能会不能推广到新的数据。(1)下图是一个回归问题的例子&#xff1a;第一个模型是一个线性模型&#xff0c;欠拟合&a…

Java简单记事本设计实验报告_基于JAVA的记事本设计报告.doc

基于JAVA的记事本设计报告华北科技学院计算机系综合性实验报告PAGE第 PAGE 11 页XX学校计算机系综合性实验实 验 报 告课程名称 Java程序设计实验学期 至 学年 第 学期学生所在系部 计算机系年级 专业班级学生姓名 学号任课教师实验成绩计算机系制《 Java程序设计》课程综合性实…

谷歌离开游览器不触发_谷歌游览器

谷歌浏览器不错&#xff0c;可保存不同的账户&#xff0c;互相不干扰。有2个账号&#xff0c;工作账号和个人账号&#xff0c;泾渭分明&#xff0c;不会打架&#xff0c;管理账号。总经理管理公司人员&#xff0c;厂长管理工人&#xff0c;业务员要管理自己账号&#xff0c;管理…

java scanner nextlin_java – Scanner nextLine()偶尔会跳过输入

让我猜一下 – 你没有显示使用上面尝试获取lastName的扫描器的代码.在那次尝试中,你没有处理行尾令牌,所以它是悬空的,只是被你试图获取lastName的nextLine()调用吞噬.例如,如果你有这个&#xff1a;Scanner keyboard new Scanner(System.in);System.out.print("Enter a …

python office库_python库编程.os平台.office平台

1.库安装Python库 PyPI – Python Package Index &#xff1a;https://pypi.python.org/(1) Python库的自定义安装&#xff1a;找到库所在网站&#xff0c;根据指示下载安装安装numpy库库所在网站&#xff1a;http://www.numpy.org/下载地址&#xff1a;http://sourceforge.ne…

java编译系统资源不足_Ant编译项目资源不足

今天用ant编译项目出现 [javac] 系统资源不足。的错误&#xff0c;如下Buildfile: build.xml-compile:[javac] Compiling 919 source files to E:\DSHR\dshr\WebContent\WEB-INF\classes[javac][javac][javac] 系统资源不足。[javac] 有关详细信息&#xff0c;请参阅以下堆栈追…

java线程三部分_java 多线程三

注意到 java 多线程一 中 MyThread2 运行结果出现0、-1&#xff0c;那是因为在操作共享数据时没有加锁导致。加锁的方式&#xff1a;1、同步方法2、同步代码块3、锁读过 java.util.concurrent 集合源码就知道&#xff1a;HashMap:public V put(K key, V value) {...}Hashtable:…

python简述定义函数的规则_Python的函数定义

有经验的程序员往往将功能较为独立、且可以被重复使用的代码块封装成函数&#xff0c;可以有效提高代码的模块化、解耦性和重复利用率。我们前面用到的print()函数就是Python的内建函数&#xff0c;我们也可以根据Python给我们提供的规则进行自定义函数。这里我们用PyCharm来进…

jdk中java_怎样使用JavaJDK中Java?

什么是UDP协议 UDP协议的全称是用户数据报&#xff0c;在网络中它与TCP协议一样用于处理数据包。在OSI模型中&#xff0c;在第四层——传输层&#xff0c;处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点&#xff0c;也就是说&#xff0c;当报文发…

python中table表结构_python中的简易表格prettytable

安装&#xff1a;pip install PrettyTable普通表格from prettytable import PrettyTabletable PrettyTable([编号,云编号,名称,IP地址])table.add_row([1,server01,服务器01,172.16.0.1])table.add_row([2,server02,服务器02,172.16.0.2])table.add_row([3,server03,服务器03,…

java 类型推理_java 11 局部变量类型推断

什么是局部变量类型推断&#xff1f;var javastack "javastack";System.out.println(javastack);大家看出来了&#xff0c;局部变量类型推断就是左边的类型直接使用 var 定义&#xff0c;而不用写具体的类型&#xff0c;编译器能根据右边的表达式自动推断类型&#…

python笨办法_笨办法学Python(十)

习题 10: 那是什么&#xff1f;在习题 9 中我你接触了一些新东西。我让你看到两种让字符串扩展到多行的方法。第一种方法是在月份之间用 \n (back-slash n )隔开。这两个字符的作用是在该位置上放入一个“新行(new line)”字符。使用反斜杠 \ (back-slash) 可以将难打印出来的字…

java什么变量用作英文_Java基础之变量-什么是变量

什么是变量:在计算机语言中用来存储计算结果或表示值如何命名Java变量:如同酒店会给每个房间起个性化的名字一样&#xff0c;程序中的变量也需要用合理的名字进行管理—变量名&#xff01;变量命名要符合以下规则:首字母必须是大写或小写的英文字母可以用下划线_开头可以用美元…

vue保存图片到手机相册_手机照片误删了怎么找回?这三个方法轻松搞定,亲测有效...

手机照片误删了怎么找回&#xff1f;很多人在使用手机拍照时&#xff0c;都会出现拍好的照片不小心点击了删除等情况&#xff0c;比如去某个地方游玩&#xff0c;或者看到了某个特别的场景拍下来的时候不小心删除了&#xff0c;那就非常可惜了&#xff0c;那么如何找回手机中误…

lsm tree java_BasicTreeUI

方法详细信息createUI public static ComponentUI createUI​(JComponent x)构造一个BasicTreeUI的新实例。参数x - 一个组件结果BasicTreeUI的新实例getHashColor protected Color getHashColor()返回散列颜色。结果哈希颜色setHashColor protected void setHashColor​(Color…

vue if判断_VUE学习记录2

v-if、v-eles、v-else-if​ v-if用于条件判断&#xff0c;判断Dom元素是否显示。<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scal…

利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强

一、摘要近年来&#xff0c;出于节约一次性能源的考虑&#xff0c;人们已经加大对太阳能等天然资源的利用&#xff0e;致力于模拟天然光合作用的研究&#xff0c;而光合作用中的捕光复合物又称为光子天线。光子天线中往往存在一种或几种猝灭剂&#xff0c;猝灭剂吸收光子后产生…

java cmd停服务_java代码启动cmd执行命令来开启服务出现无法连接的问题

我想使用openoffice的格式转换功能&#xff0c;需要先开启openoffice的服务&#xff0c;当我手动敲入命令的时候&#xff0c;是可以运行起来的&#xff0c;但是通过Java代码执行却出现拒绝连接的问题&#xff0c;请帮我看看怎么回事public static String soffice_host "1…

与时间相关的java源码_Java 基于当前时间获取和计算时间

import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.Month;/**来自N o w J a v a . c o m - 时代Java**/public class Main {public static void main(String[] args){LocalTime time LocalTime.now();System.out.print…