资讯专栏INFORMATION COLUMN

Python的hasattr(),getattr(),setattr()

liangdas / 2498人阅读

1. hasattr(object, name)

  判断object里是否有name属性,有就返回True,没有则返回False。

class MyClass(object):
    name = "jack"
    age = "22"


obj = MyClass()
print(hasattr(obj, "name"))  # True
print(hasattr(MyClass, "age"))  # True
print(hasattr(obj, "gender"))  # False
2. getattr(object, name, [default])

用来获取object的属性或方法,有就打印出来. 没有就打印默认值,若是没有设置默认值则报错

class MyClass(object):
    name = "jack"
    age = "22"

    def func(self):
        return "hello world!!!"


obj = MyClass()

print(getattr(MyClass, "name"))  # jack
print(getattr(obj, "age"))  # 22
print(getattr(MyClass, "func"))  # 
print(getattr(obj, "func"))  # >
# print(getattr(MyClass, "func1"))  # 没有设置默认值,找不到方法会报错: AttributeError: type object "MyClass" has no attribute "func1"
print(getattr(MyClass, "func1", None))  # 设置了默认值None,找不到就会返回默认值: None

print(getattr(MyClass, "func")("self"))  # hello world!!!
print(getattr(obj, "func")())  # hello world!!!
3. setattr(object, key, value)

用来对object的属性key赋值value. 若是key存在,则更新value的值. 若key不存在,则先创建属性key再对其赋值value.

class MyClass(object):
    name = "jack"
    age = "22"


obj = MyClass()

setattr(MyClass, "name", "tom")
print(getattr(MyClass, "name"))  # tom

setattr(obj, "age", 28)
print(getattr(obj, "age"))  # 28

setattr(MyClass, "gender", "male")
print(getattr(MyClass, "gender"))  # male
print(getattr(obj, "gender"))  # male

setattr(obj, "hobby", "skating")
print(obj, "hobby")  # <__main__.MyClass object at 0x00000209F5070630> hobby
print(MyClass, "hobby")  #  hobby

三个方法一起用:

class MyClass(object):
    name = "jack"
    age = "22"


# 判断Myclass是否有gender属性,有则打印,没有则添加
def if_attr(gender="male"):
    if hasattr(MyClass, "gender"):
        return getattr(MyClass, "gender")
    return setattr(MyClass, "gender", gender)


if_attr(gender="female")
print(getattr(MyClass, "gender"))  # female

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42874.html

相关文章

  • python--面向对象进阶

    摘要:它首先被程序语言的设计领域所采用并在和面向对象方面取得了成绩。面向对象中的反射通过字符串的形式操作对象相关的属性。注构造方法的执行是由创建对象触发的,即对象类名而对于方法的执行是由对象后加括号触发的,即对象或者类执行执行逻辑题 isinstance和issubclass 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 #!/usr/bin/env py...

    Profeel 评论0 收藏0
  • 经验拾忆(纯手工)=> Python好用深度技能工具介绍

    摘要:单元素元祖这是整数这才是元祖也许这两行,你们当时疑惑过,并且现在也都知道了,当然重点并不在这里。。虽然我水平很垃圾,但是我知道匿名函数有一种执行方式叫做自执行。看吧,这就是版的匿名函数自执行方法。 单元素元祖: a = (1) # 这是整数1 a = (1,) # 这才是元祖 也许这两行,你们当时疑惑过,并且现在也都知道了,当然重点并不在这里。。 我无聊的时候想过,为什么单...

    UnixAgain 评论0 收藏0
  • Python动态属性和特性

    摘要:一利用动态属性处理数据源属性在中,数据的属性和处理数据的方法统称属性。处理无效属性名在中,由于关键字被保留,名称为关键字的属性是无效的。内置函数列出对象的大多数属性。点号和内置函数会触发这个方法。 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解如何利用动态属性处理数据;2、掌握Pyth...

    scola666 评论0 收藏0
  • Werkzeug Local与LocalProxy等浅析

    摘要:线程局部变量,也就是每个线程的私有变量,具有线程隔离性。按我们正常的理解,应该是每一个请求对应一个处理线程。在中,除了线程之外,还有个叫协程的东东,这里不提进程。配合会确保不管是协程还是线程,只要当前请求处理完成之后清除中对应的内容。 首先贴出官方文档地址:http://werkzeug.pocoo.org/doc...几个local?threading.localwerkzeug.l...

    The question 评论0 收藏0
  • python:改良廖雪峰使用元类自定义ORM

    摘要:概要本文仅仅是对廖雪峰老师的使用元类自定义进行改进,并不是要创建一个框架编写,删除了参数,参数全部为定义字段类型相关参数,和众多有名的相同,使用反射,方便字段的扩展,如本例使用就是反射的应用字段类型字段长度字段默认值,如果想扩展可以填写更多 概要 本文仅仅是对廖雪峰老师的使用元类自定义ORM进行改进,并不是要创建一个ORM框架 编写field class Field(object): ...

    张迁 评论0 收藏0

发表评论

0条评论

liangdas

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<