行测 jetbrains 另类堆栈 function woocommerce mtu原理 后台网站模板 react脚手架搭建 kafka默认端口 matlab 图像识别 android入门实例 java使用redis hbuilder插件 python数据库 python入门教程 python循环语句 windows搭建python开发环境 java编程环境 java正则表达式用法 java文件写入 怎么看java版本 java原始数据类型 linux系统命令大全 wps2011 网站数据分析工具 苹果手机老是自动重启 易语言多线程 迅雷免费会员号共享 矩阵分析与应用 linux多线程编程 unity3d下载 蓝牙测试软件 苹果x银色 ps调整边缘抠头发丝 保卫萝卜沙漠7攻略 相册制作软件 骰子表情包 向日葵9 cdr裁剪工具怎么用 android计算器
当前位置: 首页 > 学习教程  > 编程语言

2021-1-13多态、鸭子类型、isinstance、issubclass、__str__和__del__,字符串控制属性,异常处理的内容

2021/1/13 19:24:02 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

多态与多态性 同一种事物有多种形态,就叫多态性 多态的特性:归一化,当我们调用子类的某种属性时,只需让子类遗传父类的标准即可,所以父类的功能是用来定义标准的, 查看子类的功能有没有哪些东西时&#xff…

多态与多态性
同一种事物有多种形态,就叫多态性
多态的特性:归一化,当我们调用子类的某种属性时,只需让子类遗传父类的标准即可,所以父类的功能是用来定义标准的,
查看子类的功能有没有哪些东西时,直接看父类的功能即可,若父类中有的功能,子类中一定有,且用法一致
多态不是为了解决类之间的代码冗余问题,而是为了用父类来统一多个子类之间的用法
父类定义的功能,子类需要派生一些相似的功能,子类也可以不执行,但若不执行,这就违背了归一性这一原则
父类可以强制让子类按照它的标准(抽象基类,无法被调用,只能定标准)执行代码如下:

import abc
class Anlimal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def talk(self):
        pass

这样Animal下的所有代码都会拥有talk这个功能
若多个子类没有共同的代码,但调用的功能也一样,可以规定一下统一的标准,子类都遵循标准即可,就不用再定义一个父类
节省代码,但若有一个子类不遵循,就可能出现问题

鸭子类型:
如果一个事物看着像另一个事物,我们就可以把它叫另一个事物,这就是鸭子类型的原理
体现:各个数据类型中的len()内置方法

isinstance()判断一个事物是否是另一个事物的实例(对象)
方法:isinstance(对象,类)
issubclass(子类,父类)判断一个类是否是另一个类的子类

__开头并且__结尾的属性会在满足某种条件下自动触发,通常完成一些定制化的类
str 若打印一个对象就会自动调用一个print(obj.str())方法的运行
str 没有参数,返回值必须是字符串,为对象定制一些规定的打印信息

class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return "<%s:%s>"%(self.name,self.age)

obj = People("egon",19)
print("=============== end ==================")

del 对象删除就会触发,不删也会触发,因为程序运行结束后也会释放内存空间,删除对象,通常多用此方法清理操作系统的资源,

class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.f = open("a.txt","rt",encoding='utf-8')

    def __del__(self):
        self.f.close()

obj = People("egon",19)
del obj
print("===============end==================")

反射 通过字符串去操作属性

python
class People:
    def __init__(self,name,age):
        country = "china"
        self.name = name
        self.age = age

    def tell_info(self):
        print(self.name,self.age)

obj = People('egon',18)
print(hasattr(People,"country"))

hasattr(对象,“属性”)判断对象具不具有某种属性
getattr(对象,”属性“)拿对象中的数据或功能属性
setattr(obj,“xxx”,1111)为对象添加某种属性,obj.xxx = 1111
delattr(对象,“属性”)为对象删除某种属性

异常处理
什么是异常?
异常是错误发生的信号
程序一旦出错就会产生一个异常
如果该异常没有被处理,该异常就会被抛出来,程序的运行也随即终止

错误分两种:
1、语法错误
2、逻辑错误
如何处理异常
语法错误----》程序运行前就改正
逻辑错误
针对可以控制的逻辑错误,在代码层面解决
针对不可以控制的逻辑错误,应该采用try…except
try…except一种异常产生之后的补救措施用法如下

try:
    被检测代码块
except 异常类型1 as e :
    处理异常的代码
try:
    被检测代码块
except 异常类型2 as e :
    处理异常的代码
try:
    被检测代码块
except 异常类型3 as e :
    处理异常的代码
try:
    被检测代码块
except (异常类型4,异常类型5,异常类型6) as e :
    处理异常的代码
except Exception:         #除去以上的所有异常都可以接住
    处理异常的代码

try…except,类似一个补丁,用的越少越好

异常处理的类型

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

断言

assert len(l) ==3

测试程序的时候用,测试那一部分有问题,若测试完成,删除断言即可(运行过后会删除)

#主动抛异常
raise用法:
raise 异常类型

#自定义异常

class permission(BaseException):
    def __init__(self,msg):
        self.msg = msg

raise  Permission("权限错误")

本文链接: http://www.dtmao.cc/news_show_600063.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?