教你如何 面向对象编程 超详解!(四)

issubclass()与 isinstance()

issubclass()

内置函数issubclass()用于判断类对象与类对象之间的关系
内置函数isinstance()用于判断实例对象与类对象之间的关系

内置函数issubclass接受两个实参,
第一个实参是类对象,
第二个实参是类对象或由类对象组成的元组。

当第二个实参是类对象时,如果第一个实参是第二个实参的子类,那么返回true。
当第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象的子类,返回true。
在这里插入图片描述

isinstance()

内置函数isinstance接受两个实参:

  • 第一个实参是类对象,
  • 第二个实参是类对象或由类对象组成的元组。

当第二个实参是类对象时,如果第一个实参是第二个实参的子类,那么返回true。 当第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象的子类,返回true。
在这里插入图片描述

type()与 dir()

type()

  • 内置函数type()用于获得指定对象的类型。
  1. 实例对象的类型是对应的类对象。
    类对象的类型是type,也就是说,类对象是type的一个实例对象。

在这里插入图片描述

  1. 查看类型
  • 自定义函数对象的类型是function。
  • 内置函数对象的类型是builtin_function_or_method。

在这里插入图片描述

  1. 可以使用运算符==判断某个对象的类型是否是指定的类型。
  • 对于基本数据类型,可以直接使用其对应的类名
  • 如果不是基本数据类型,需要使用标准库中的模块types中定义的变量。
    在这里插入图片描述
    在这里插入图片描述

dir()

  • 对于制定的类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表。
  • 类对象与实例对象的结果是有区别的,类对象的结果不包括实例属性。

在这里插入图片描述
可以看到这里多了一个‘ia’

属性之增删改查

  1. hasattr(object, name ) 用于判断指定的对象object是否有参数name指定的属性或方法。
  2. getattr(object, name[, default1]) 用于获取指定的对象object中名为name的属性或方法。
    如果不指定参数default,那么当object中不存在名为name的性或方法时,抛出AttributeError;
    如果指定了参数default,那么当object中不存在名为name的属性或方法时,就会返回default.getattr(object, name),等价于: object.name
  3. setattrfabject, name, value) 用于在指定的对象object中添加或修改名为参数name的属性或方法,添加或修改后的值为value,setattr(object, name, value)等价于: object.name = value,;
  4. delattr(object, name) 用于删除指定的对象object中名为参数name的属性或方法。
    delattr(object, name)等价于: del object.name

注意:只有在不知道对象信息的情况下,才会去获取对象的信息。
因此,如果可以直接写: object.name就不要写为getattr(object, ‘name’)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算术运算符重载

标准算术运算符在默认情况下不能用于自定义类对象的实例对象
在这里插入图片描述
标准算术运算符在默认情况下不能用于自定义类对象的实例对象。

必须在自定义类对象中实现标准算术运算符对应的以下特殊方法:

  1. +对应的特殊方法是add()与radd()
  2. -对应的特殊方法是sub()与rsub()
  3. x对应的特殊方法是mul()与rmul()
  4. /对应的特殊方法是truediv()和rtruediv()
  5. //对应的特殊方法是floordiv()和rfloordiv()

在这里插入图片描述

在这里插入图片描述

__ str__( )与__repr__()

类对象的特殊方法之__ str__()与__repr__()用于自定义并返回实例对象的字符串表示形式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 类对象的特殊方法之__ str__ ()和_ repr__ () 用于自定义并返回实例对象的字符串表示形式。
  1. 当在交互式命令行中直接打印一个实例对象时
    如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
  2. 当调用内置函数print打印-一个实例对象时
    如果在实例对象对应的类对象中实现了特殊方法__ str__ (), 会自动调用该方法;
    否则,如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
  3. 当调用内置函数str创建字符串并且实参是一个实例对象时
    如果在实例对象对应的类对象中实现了特殊方法__ str__ (), 在内置函数st r的内部会自动调用该方法;
    否则,如果在实例对象对应的类对象中实现了特殊方法_ repr__ (), 在内置函数str的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
  4. 当调用内置函数repr创建字符串并且实参是一个实例对象时
    如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 在内置函数repr的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值