面向对象编程 3


内置函数表: https://www.cnblogs.com/xiao1/p/5856890.html

issubclass() 与 isinstance()

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


内置函数issubclass()接收两个实参
  第一个实参是类对象
   第二个实参是类对象或有类对象组成的元组

  当第二个实参是类对象时,如果第一个实参是第二个实参的子类,那么返回True
  当第二个实参是类对象组成的元祖时,如果第一个实参是第二个实参中任意一个类对象的子类,返回True

  当第二个实参是类对象时,如果第一个实参是第二个实参的实例对象,或者第一个实参是第二个实参的子类的实例对象,那么返回True

>>> class A(object):
			pass
	
>>> class B(object):
			pass

>>> class C(object):
			pass

>>> class D(A):
			pass

>>> issubclass(D, A)
> True
>>> isinstance(D, B)
> False
>>> isinstance(D, (B, C, A))
> True
>>> issubclass(bool, int)
> True
>>> issbuclass(bool, str)
> False

内置函数is instance()接收两个实参
   第一个实参是实例对象,
   第二个实参是类对象或由类对象组成的元组。
   当第二个实参是类对象时,如果第一个实参是第二个实参的实例对象,或者第一个实参 是第二个实参的子类的实例对象,那么返回True。
  当第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意- -个类对象或其子类的实例对象,那么返回True。

>>> class A(object):
			pass
	
>>> class B(object):
			pass

>>> class C(object):
			pass

>>> class D(A):
			pass

>>> isinstance(D(), D)
> True
>>> isinstance(D(), A)
> True
>>> isinstance(D(), (B, C, A))
> True

type()

  内置函数type()用于获得指定对象的类型
  实例对象的类型是其对应的类对象,类自己的类型就是type


  可以使用==判断某个对象的类型是否是指定的类型
  对于基本数据类型,可以直接使用其对应的类名;如果不是基本数据类型,需要使用标准库中的模块types中定义的变量。

>>> type(18)
>int
# 类的类型
>>> class MyClass(object):
			pass
>>> type (MyClass)
> type
>>> type(int)
> type
# 自定义函数类型
>>> def do_sth():
			pass
>>> type(do_sth)
> function
# 内置函数类型
>>> type(dir)
> builtin_function_or_method
# 自定义函数不是基本数据类型,不能使用==直接判断,会报错
>>> type(do_sth) == function
> NameError: name 'function' is not defined

dir()

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


  调用内置函数dir()后的返回值中,很多属性和方法都是以下划线__开头和结尾的,这些属性和方法中绝大多数都继承自类object。
  以双下划线__开头和结尾的属性称为特殊属性,以双下划线__开头和结尾的方法称为特殊方法。
  特殊属性和特殊方法都是系统预定义的,我们自定义的属性名和方法名不要以双下划线__开头和结尾。
  在我们自定义类对象时,经常会重写一一个或多个特殊方法,例如_ init_ 。 特殊方法会在特定的情形下被自动调用,很少需要手动调用特殊方法。

属性之增删改查

  1. hasattr(object, name )
    用于判断指定的対象object是否有参数name指定的属性或方法。
  2. getattr(object, name[, default])
    用于荻取指定的対象obj ect中名刃name的属性或方法。
    如果不指定参数default,那幺当obj ect中不存在名カname的属性或方法吋,抛出AttributeError.如果指定了参数default,那幺当object中不存在名カname的属性或方法吋,就会返回default。getattr(object, name)等价于: object. name.
  3. setattr(object, name , value )
    用于在指定的対象obj ect中添加或修改名内参数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. *对应的特殊方法是__ mul__ ()和__ .rmul__ ();
  4. /对应的特殊方法是_ truediv__ ( )和__ rtruediv__ ( );
  5. //对应的特殊方法是_ floordiv__ ()和__ rfLoordiv_ ( )。

   假设两个运算数obj1和obj2,以+为例,对于obj1 + obj2, 需要在obj 1对应的自定义类对象中实现特殊方法. add_ (), 或在obj2对应的自定义类对象中实现特殊方法__ radd__ () (radd中的r是right的缩写,因为obj 2位于运算符+的右边,所以实现的特殊方法是__ radd__ ( );因为obj1位于运算符+的左边,所以实现的特殊方法是_ add_ ()) 。
在这里插入图片描述

__ str __() 与 __ repr __()

类对象的特殊方法值__str__() 与 __ repr __()用于自定义并返回实例对象的字符串表示形式。


   1.当在交互式命令行中直接打印一一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法_ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
   2.当调用内置函数print打印一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法__ str__ (), 会自动调用该方法;
否则,如果在实例对象对应的类对象中实现了特殊方法repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
   3.当调用内置函数str创建字符串并且实参是一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法_ str__ (), 在内置函数str的内部会自动调用该方法; 否则,如果在实例对象对应的类对象中实现了特殊方法repr__ (), 在内置函数st r的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
   4.当调用内置函数repr创建字符串并且实参是一一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 在内置函数repr的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。

   通常情况下,类对象的特殊方法_ str__ ()和_ repr. 、 截图时隐藏当前窗口 现代码是一样的,因此,当实现了其中-个后,可以把其方法名赋值给另一个的方法名。

>>> class MyClass (object) :
>>> def__ str__ (self) :
>>> return”这是实例对象的字符串表示形式”

>>> __repr__=__ str__

内置函数str( )和repr( )都返回对象的字符串表示,其区别在于:
   str()的返回值是给用户看的,更加用户友好;
   repr()的返回值是给程序开发者看的,是为调试服务的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值