1. hasattr(object, name)

描述:用来判断对象object中是否含有名为name的属性(属性或者方法),如果有则返回True,如果没有返回False

注意:name参数是字符串格式。

class A:age = 18def func(self):return "这是A类里面的func方法"print(hasattr(A, 'age'))  打印结果: True
print(hasattr(A, 'func'))   打印结果: True
print(hasattr(A, 'height')) 打印结果: False

下面我们来个实际运用(可能用到单例模式和魔法函数的知识点,看不懂的小伙伴们可以跳过)。

1、通过装饰器实现单例模式,只要任意一个类使用该装饰器装饰,
那么就会变成一个单例模式的类。(面试真题)------------------函数实现------------------
def single(cls):def wrapper(*args, **kwargs):if not hasattr(cls, '__instance'):cls.__instance = cls(*args, **kwargs)return cls.__instancereturn wrapper-------------------类实现------------------
class single:__instance = Nonedef __init__(self, cls):self.cls = clsdef __call__(self, *args, **kwargs):if not hasattr(self.cls, '__instance'):self.cls.__instance = self.cls(*args, **kwargs)return self.cls.__instance@single  # A= single(A)
class A:passa = Musen()
b = Musen()
print(a)
print(b)

2. setattr(object, name, value)

描述:用来给对象object的name属性重新赋值为value,如果这个对象的name属性不存在的话,那么就会给这个对象新生成一个属性name,并且把value值赋给这个新生成的属性name

class A:age = 18def func(self):return "这是A类里面的func方法"a = A()
setattr(A, 'age', 99)
print(a.age)  打印结果: 99
setattr(A, 'weight', 170)
print(a.weight)  打印结果: 170

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

描述:用于返回一个对象属性值,object是对象,name是属性,default是默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

class A:age = 18def func(self):return "这是A类里面的func方法"print(getattr(A, 'age'))   打印结果: 18
print(getattr(A, 'height'))   打印结果: AttributeError: type object 'A' has no attribute 'height'
print(getattr(A, 'name', 999))  打印结果: 999, 如果对象没有这个name属性,给他一个默认返回值,即是999;
print(getattr(A, 'age', 520))   打印结果: 18, 如果对象没有这个age属性,给他一个默认返回值,即是520;如果该对象有这个age属性,则还是返回的是原来的值 而不是默认值520

注意:如果给定的name是类的方法名的话,那么返回的值 是函数对象,那么此时需要调用函数对象来获取返回值,类似于func(),后面加个括号即可。这里要注意的是,如果是实例函数的话,不能写getattr(A, 'func')(),会报错TypeError: func() missing 1 required positional argument: 'self'。因为不能直接用A这个类名去调用实例方法,可以考虑创建这个类的对象A(),然后直接再去调用他getattr(A(), 'func')()

class A:age = 18def func(self):return "这是A类里面的func方法"getattr(A, 'func')()  报错: TypeError: func() missing 1 required positional argument: 'self'
print(getattr(A(), 'func')())   打印结果: 这是A类里面的func方法

python中setattr(),getattr(),hasattr()函数的使用相关推荐

  1. python 中setattr()函数

    语法 setattr(object, name, value) 参数 object – 对象. name – 字符串,对象属性. value – 属性值. 返回值 无 例子 对已存在的属性进行赋值: ...

  2. python hasattr函数_浅谈python中的getattr函数 hasattr函数

    hasattr(object, name) 作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的). 示例: & ...

  3. python中的内置函数getattr()介绍及示例

    python中的内置函数getattr()介绍及示例 其实getattr()这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以把一个类可能要调用的方法放在配置文件里 ...

  4. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法

    getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...

  5. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  6. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  7. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用...

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  8. python中的高阶函数

    python中的高阶函数 文章目录: 1 什么是高阶函数? 1.1 高阶函数:一个函数的`函数名`作为参数传给另外一个函数 1.2 高阶函数:一个函数返回值(return)为另外一个`函数` 2 py ...

  9. Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略

    Python编程语言学习:python中与数字相关的函数(取整等).案例应用之详细攻略 目录 python中与数字相关的函数 1.对小数进行向上取整 1.1.利用numpy库 1.2.利用math库

  10. Python中字符串常用处理函数

    ** Python中字符串常用处理函数 ** 1.len( )函数 用len( )函数计算字符串的长度 2.strip( )函数 删除字符串两边的空白符(包括:'\n'.'\t'.'\r') 注:只能 ...

最新文章

  1. Linux环境变量说明与配置
  2. 快速搭建 Serverless 在线图片处理应用
  3. SQL2000 统计每周,每月,每季,每年的数据
  4. Spring Boot 内置Tomcat——集成JSP解决方案
  5. rabbitmq怎么停止_Windows环境下RabbitMQ的启动和停止命令
  6. [Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞
  7. 工作总结21:阅读代码之axios
  8. 【常见笔试面试算法题12续集五】动态规划算法案例分析5 01背包练习题
  9. appium更新到1.8.2,不能打开运行的解决办法
  10. pip默认使用国内镜像地址
  11. 大会门票限免最后一周!来聊聊 NVIDIA、抖音等大厂的 AI 技术落地
  12. 约瑟夫环问题——python
  13. 多个漏洞可被用于破坏劫持施耐德 PowerLogic 设备
  14. 网页特效代码大全网址
  15. Top3获奖金10万,Seq2seq对话系统设计方案
  16. VScode 配置 Java 环境
  17. 32/64位Win7_2017.09通用多合一安装版/Ghost版
  18. 【Tools系列】SecureCRT文件传输模式之Zmodem
  19. 凭什么国内造不出高端示波器?一起扒一扒示波器的发展史!
  20. 选择阿里云服务器的理由

热门文章

  1. PDF怎么合并?教你2个免费一键合并PDF的方法
  2. 傻瓜式解决pycrypto安装错误
  3. BackTrack5完全配置
  4. 【C语言】for循环常见问题
  5. ERP中数据导入的注意事项&常见异常处理(EDI)
  6. 数值计算笔记之插值(四)三次样条插值
  7. php切图工具,ps切片工具怎么切图
  8. 靶场vulnstack4内网渗透
  9. php导出excel 细边框,phpexcel设置边框不全或者只有竖线问题解决 方法
  10. 计算机算法常用术语中英对照