python getattr_python getattr的美妙生活

一、简介

1、getattr是Python的内置函数

2、用法getattr(object,“attribution”,None)

object: 对象

attribution:实例方法、或者类方法(object是一个类对象的时候)必须是str

None:默认值,如果没有attribution,或者没有返回值,返回默认值

一句话简介:拿到对象是的该属性

二、实例

class Test:

age = 10

def __init__(self):

self.name = 'Donald'

@staticmethod

def sex():

return 'man'

print(getattr(Test, 'age'))

print(getattr(Test, 'sex')())

-----

10

man

1、以上是类对象,很好办,再来一个例子

a = {}

a['hello'] = 'world'

print(getattr(a, 'hello'))

-----

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'dict' object has no attribute 'hello'

2、a是一个字典对象,传入hello为什么报错?因为hello并不是a的属性,可以使用dir()查看属性:

print(dir(a))

-----

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

****

print(getattr(a, '__str__'))

print(getattr(a, '__str__')())

-----

"{'hello': 'world'}"

3、如果不加括号,返回的是一串内存地址,正常显示需要想调用函数一样加上()

三、扩展

__getattr__方法

1 在Python中以__开头的称为魔法方法或专用方法,也有一个__getattr__方法。

2 改方法仅当属性不能在实例的__dict__或其父类的 __dict__中找到时,才被调用。

class Test:

age = 10

def __init__(self):

self.name = 'Donald'

@staticmethod

def sex():

print('in sex')

return 'man'

def __str__(self):

print('in str')

return str(self.name)

def __getattr__(self, item):

return f'{item},没有这个属性,访问错误'

if __name__ == '__main__':

p = Test()

print(p.age)

print(p)

print(p.sex())

print(p.sss)

-----

10

in str

Donald

in sex

man

sss,没有这个属性,访问错误

-3、在访问实例sss的时候,因为在实例对象和类的__dict__都找到不到,所以会调用该函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值