目录

1. issubclass(class, classinfo)

2. isinstance(object, classinfo)

3. hasattr(object, name)

4. getattr(object, name[, default])

5. setattr(object, name, value)

6. delattr(object, name)

7. property(fget=None, fset=None, fdel=None, doc=None)

8. property的修饰符实现方法


1. issubclass(class, classinfo)

判断 class 是否为 classinfo 的一个子类,是则返回 True,否则返回 False;

一个类可以认为是自身的子类;

一个类父类的父类或更高层级的父类,都可以认为是自身的父类;

class 必须为一个类对象,否则报错;classinfo 可以是类对象,也可以是类对象组成的元组,否则报错;

classinfo 为类对象元组时,class 只要是其中任意一个类对象的子类,则返回 True;

有多个父类的子类,只需要 classinfo 中有其中一个父类,则返回True;

#创建父类
class Base1:def __init__(self,name='Base1'):self.name1 = namedef showname1(self):print(f'名字为:{self.name1}')class Base2:def __init__(self,name='Base2'):self.name2 = namedef showname2(self):print(f'名字为:{self.name2}')class Base3:def __init__(self,name='Base3'):self.name3 = namedef showname3(self):print(f'名字为:{self.name3}')#创建子类
class Derived1(Base1):passclass Derived2(Base2,Base3):passclass Derived3(Derived1):pass#判断 class 是否为 classinfo 的一个子类,是则返回 True,否则返回 False
issubclass(Derived1,Base1)
True
issubclass(Derived1,Base2)
False#一个类可以认为是自身的子类
issubclass(Derived1,Derived1)
True#一个类父类的父类或更高层级的父类,都可以认为是自身的父类
issubclass(Derived3,Base1)
True#classinfo 可以类对象组成的元组,class 只要是其中任意一个类对象的子类,则返回 True
issubclass(Derived1,(Base1,Base2))
True#有多个父类的子类,只需要 classinfo 中有其中一个父类,则返回True
issubclass(Derived2,Base2)
True
issubclass(Derived2,Base3)
True#class 不是类对象报错
issubclass((Derived1,Derived2),Base1)
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: issubclass() arg 1 must be a class
#classinfo 不是类对象或元组报错
issubclass(Derived1,[Base1,Base2])
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: issubclass() arg 2 must be a class or tuple of classes

2. isinstance(object, classinfo)

判断 object 是否为 classinfo 的一个实例对象,是则返回 True,否则返回 False;

object 是 classinfo 中某个类对象的子类或更下层的子类的子类等,仍返回True;

object 必须为一个实例对象,否则返回 False;classinfo 可以是类对象,也可以是类对象组成的元组,否则报错;

classinfo 为类对象元组时,object 只要是其中任意一个类对象的实例对象,则返回 True;

#创建的类见章节1. issubclass
#创建实例对象
base11 = Base1()
base12 = Base1()
base13 = Base1()
base21 = Base2()
derived11 = Derived1()
derived12 = Derived1()
derived21 = Derived2()
derived31 = Derived3()#判断 object 是否为 classinfo 的一个实例对象,是则返回 True,否则返回 False
isinstance(base11,Base1)
True
isinstance(base21,Base1)
False
isinstance(base12,Base1)
True#object 是 classinfo 中某个类对象的子类或更下层的子类的子类等,仍返回True
isinstance(derived11,Base1)
True
isinstance(derived21,Base1)
False
isinstance(derived31,Base1)
True
isinstance(derived21,Base2)
True
isinstance(derived21,Base3)
True#classinfo 为类对象元组时,object 只要是其中任意一个类对象的实例对象,则返回 True
isinstance(derived31,(Base1,Base3))
True#class 必须为一个实例对象,否则返回 False
isinstance(Base1,Base1)
False
isinstance(Derived1,Base1)
False
isinstance(derived11.name1,Base1)
False
isinstance(derived11.showname1,Base1)
False
#classinfo 可以是类对象,也可以是类对象组成的元组,否则报错
isinstance(derived31,[Base1,Base3])
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: isinstance() arg 2 must be a type or tuple of types

3. hasattr(object, name)

判断实例对象 object 中是否有属性名为 name 的变量或方法,是则返回 True,否则返回 False;

object 必须为一个实例对象,否则返回 False;

name 为变量或方法名的字符串,否则报错;

可以认为是将实例对象 object 及其类对象的 '__dict__' 属性中所有的键与 'name' 做比对,判断是否与其中一个键值相等。

#创建的类见章节1. issubclass
#创建实例对象见章节2. isinstance#实例对象与创建实例的类对象的 '__dict__' 属性
base11.__dict__
{'name1': 'Base1'}
Base1.__dict__
mappingproxy({'__module__': '__main__', '__init__': <function Base1.__init__ at 0x00000218364AB040>, 'showname1': <function Base1.showname1 at 0x00000218364AB160>, '__dict__': <attribute '__dict__' of 'Base1' objects>, '__weakref__': <attribute '__weakref__' of 'Base1' objects>, '__doc__': None})#判断实例对象 object 中是否有属性名为 name 的变量或方法,是则返回 True,否则返回 False
hasattr(base11,'name1')
True
hasattr(base11,'showname1')
True
hasattr(base11,'__init__')
True
hasattr(base11,'__dict__')
True
hasattr(base11,'__doc__')
True#object 为类对象,返回 False
hasattr(Base1,'name1')
False
#name 不是字符串,报错
hasattr(base11,name1)
Traceback (most recent call last):File "<input>", line 1, in <module>
NameError: name 'name1' is not defined

4. getattr(object, name[, default])

返回实例对象 object 中,属性名为 name 的变量或方法;

object 中不存在名为 name 的变量或方法,则default 可选参数已赋值返回 default 值,default 未赋值报错;

可以认为是将实例对象 object 及其类对象的 '__dict__' 属性中所有的键与 'name' 做比对,如有对应的键,返回该键相应的值。

#创建的类见章节1. issubclass
#创建实例对象见章节2. isinstance#返回实例对象 object 中,属性名为 name 的变量
getattr(derived11,'name1')
'Base1'#返回实例对象 object 中,属性名为 name 的方法
getattr(derived11,'showname1')
<bound method Base1.showname1 of <__main__.Derived1 object at 0x00000218364A6370>>
x = getattr(derived11,'showname1')
x()
名字为:Base1#不存在名为 name 的变量或方法,则default 可选参数已赋值返回 default 值
getattr(derived11,'name2','实例中没有该属性!')
'实例中没有该属性!'#不存在名为 name 的变量或方法,default 未赋值报错
getattr(derived11,'name2')
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: 'Derived1' object has no attribute 'name2'

5. setattr(object, name, value)

设置实例对象 object 中,属性名为 name 的变量或方法的值为 value;

object 中不存在名为 name 的变量或方法,则新建变量或方法并赋值为 value;

可以认为是将实例对象 object 及其类对象的 '__dict__' 属性中所有的键与 'name' 做比对,如有对应的键,设置该键的值为 'value';没有对应的键,则新建键值对 'name : value';

该方法可设置类中变量,新设置类的方法则会因 self 参数或修饰符导致调用失败;

#创建的类见章节1. issubclass
#创建实例对象见章节2. isinstance#设置修改类中变量
derived21.showname2()
名字为:Base2
setattr(derived21,'name2','TEST')
derived21.showname2()
名字为:TEST
derived21.name2
'TEST'#设置类中不存在的变量,新增变量属性
setattr(derived21,'nametest','nameTEST')
derived21.nametest
'nameTEST'#设置修改类中方法为实例方法
def shownametest2(self):print(derived21.nametest + '2')setattr(derived21,'showname2',shownametest2)#设置成功,调用失败报错
shownametest2
<function shownametest2 at 0x00000218364A84C0>
derived21.__dict__
{'name2': 'TEST', 'nametest': 'nameTEST', 'showname2': <function shownametest2 at 0x00000218364A84C0>}
derived21.showname2()
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: shownametest2() missing 1 required positional argument: 'self'#设置修改类中方法为静态方法,调用报错
@staticmethod
def shownametest():print(derived21.nametest)setattr(derived21,'showname2',shownametest)
derived21.showname2()
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: 'staticmethod' object is not callable

6. delattr(object, name)

删除实例对象 object 中,属性名为 name 的变量或方法,如果变量或方法不存在,报错;

可以认为是将实例对象 object 及其类对象的 '__dict__' 属性中所有的键与 'name' 做比对,如有对应的键,删除该键值对,没有则报错;

无法删除不在实例对象 '__dict__' 中属于类对象的变量或方法。

#创建类
class Base:info = '123456'def __init__(self,name='Base'):self.name = namedef showname(self):print(f'名字为:{self.name}')class Derived(Base):info = 'abcdef'def showname(self,name2):print(f'名字由:{self.name},变为:{name2}')#创建实例对象
derived = Derived('Test')
derived.showname('Test2')
名字由:Test,变为:Test2
derived.info
'abcdef'#实例对象 '__dict__' 属性
derived.__dict__
{'name': 'Test'}#删除实例对象变量 name,删除后无法调用
derived.name
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: 'Derived' object has no attribute 'name'#删除实例对象对应的类对象变量或方法,失败
delattr(derived,'showname')
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: showname
delattr(derived,'info')
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: info
delattr(derived,'name')

7. property(fget=None, fset=None, fdel=None, doc=None)

property 返回一个类的属性 attribute,创建实例对象后,实例对象通过该属性调用赋值给 fget、fset、fdel 三个参数的方法,实现读取、设置、删除三种操作;

实例.attribute 将调用 getter,实现读取;

实例.attribute = value 将调用 setter,实现设置;

del  实例.attribute 将调用 deleter,实现删除;

当编码时,需要维护修改类中的读取、设置、删除方法时,只需要改变 property 中参数赋值的方法,调用 property 返回属性的其他代码无需改动。

#创建类
class Testproperty:def __init__(self,num):self.num = numdef getnum(self):return self.numdef setnum(self,value):self.num = valuedef delnum(self):del self.num#类中定义调用 property 函数的属性testattr = property(getnum, setnum, delnum, 'test property!')#创建实例,检查实例变量
test = Testproperty(5)
test.num
5#通过 property 返回属性 testattr 做读取
test.testattr
5
#通过 property 返回属性 testattr 做设置
test.testattr = 10
test.num
10
#通过 property 返回属性 testattr 做删除
del test.testattr
test.num
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: 'Testproperty' object has no attribute 'num'

8. property的修饰符实现方法

除了直接调用 property 函数,也可以通过 property 的修饰符实现同样的效果。

#创建与章节7. property 相同效果的类
class Testproperty:def __init__(self,num):self.num = num@propertydef testattr(self):'''test property!'''return self.num@testattr.setterdef testattr(self,value):self.num = value@testattr.deleterdef testattr(self):del self.num#执行读取、设置、删除,效果一致
test = Testproperty(5)
test.num
5
test.testattr
5
test.testattr = 10
test.num
10
del test.testattr
test.num
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: 'Testproperty' object has no attribute 'num'

类和对象6:相关内置函数相关推荐

  1. 又开始的python-day10-20200821-文件操作相关内置函数-拷贝-读取-写入

    # 作业1 # 设计两个类 # 一个点累 属性 x y 坐标 # 一个矩形类 属性有左上角 和 右下角坐标 # 方法 1.计算矩形面积 2.判断点是否在矩形内 # 实例化一个点对象 一个正方形对象 输 ...

  2. python 倒叙 数组_打基础一定要吃透这12类 Python 内置函数

    内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到python版本3.6.2 python一共提供了68个内置函数,我将它们分成 12 类,方便你学习. s ...

  3. 打基础一定要吃透这12类 Python 内置函数

    内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到python版本3.6.2 python一共提供了68个内置函数,我将它们分成 12 类,方便你学习. s ...

  4. python列表内置函数_Python-列表总结(操作符、方法、内置函数、相关模块)

    目录 上篇文章思考题 简介 创建与赋值 操作符 访问与更新(序列操作符切片) 判断元素是否存在(成员关系操作in,not in) 拼接列表(连接操作符+) 重复(重复操作符*) 删除 方法 添加 删除 ...

  5. python内置方法就是内置函数_python内置函数

    什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...

  6. 建议你吃透这68个内置函数!

    作者:pypypypy| 来源:博客园 内置函数就是Python给你提供的, 拿来直接用的函数,比如print,input等. 截止到python版本3.6.2 ,一共提供了68个内置函数,具体如下? ...

  7. Python 函数合集:足足 68 个内置函数请收好

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 来源:pypypypy www.cnblogs.com/pypypy/p/12011506.h ...

  8. Python3中的内置函数总结

    1.内置函数的查找 内置函数都定义在一个叫builtins模块中,此模块默认在python环境启动的时候就自动导入,可以直接使用这些函数,不用import 模块名. globals():列出当前环境下 ...

  9. 这68个Python内置函数,建议你吃透!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 整理 | 深度学习这件小事公众号 内置函数就是Python给你提供的, 拿来直接用的函 ...

  10. hive内置函数_flink教程flink modules详解之使用hive函数

    modules概念 通过hive module使用hive函数 内置函数 自定义函数 sql 客户端的使用 原理分析和源码解析 实现 modules概念 flink 提供了一个module的概念,使用 ...

最新文章

  1. Python组合数据类型之集合类型
  2. RPA和AI:加速数字化转型的步伐
  3. 如何更新 Exchange2003 SP2 中的智能邮件筛选器版本
  4. python官网怎么改中文-pycharm如何设置成中文
  5. 品质标签分几种颜色_小标签大学问,如何给实验室仪器贴标签?
  6. sort函数的应用习题(二)
  7. aix服务重启mysql_mysqld进程几分钟重启一次,如何解决?
  8. 【NLP】推荐一些NER的英文数据集
  9. 【POJ - 1463】Strategic game (树上最小点覆盖,树形dp)
  10. 计算机目标导学方法,计算机教学计划
  11. SpringBoot整合阿里云OSS上传文件
  12. linux识别科学计数法,Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]...
  13. 联想服务器st系列,联想ThinkSystem ST50评测 一款超值的入门级服务器
  14. Python Error: “ImportError: No module named six”,用自动安装解决依赖问题
  15. java中add和addall区别,java中list的add与addall方法区别
  16. Java 素数筛选法
  17. 离散数学及其应用傅彦pdf_离散数学及其应用 傅彦 等 高等教育出版社
  18. 基于hadoop的商品推荐引擎
  19. 制作PE系统--20220202
  20. RuoYi-Vue——Swagger文档401问题

热门文章

  1. hourglass论文_Hourglass模块 网络结构 代码
  2. 计算机网络实验 IP网络规划与路由设计
  3. 拆卸台式计算机的顺序,台式电脑拆装与清灰教程,让电脑焕然一新|Crucial(英睿达)...
  4. Jenkins插件源使用国内镜像中心的最新方法
  5. 计算机用word做贺卡,利用word制作贺卡
  6. 1133_SICP开发环境搭建
  7. 小强学渲染之OpenGL的GPU管线
  8. AGI STK使用本地地形和地图
  9. 利用python爬取租房信息网_python实战计划:爬取租房信息
  10. gis地图图层(前台)