这次是介绍对一个对象属性进行操作的函数,是在看神经网络代码判断是否有指定层时发现的函数。主要有两大部分一是函数介绍,二是对python的类和对象的介绍。
一、函数介绍
首先定义一个类:
>>> class test():
... A = 100
... def run(self):
... print("daydayjump")
实例化类得到一个对象:
>>> a = test()
1、hasattr() 判断是否有某个属性
hasattr(object,name)
object代表要判断的对象,name代表要判断是否存在的属性(name要以字符串形式)。 如果存在就返回True,否则返回False。
>>> hasattr(a,'A')
True
2、getattr() 获取对象的某个属性
getattr(object,name[,default])
object代表判断的对象,name代表对象的属性(name要以字符串属性),default代表默认返回值,不提供且没有对应属性时,将触发AttributeError。一般是不加default,返回对象属性值。
注意,如果获取的是方法的话,返回的是方法的内存地址,如果需要运行这个方法需要在后面加一个括号。
# 获取对象的方法
>>> getattr(a,"run")
<bound method test.run of <__main__.test object at 0x0000021F2214CF60>>
#获取对象方法的运行值
>>> getattr(a,"run")()
daydayjump
3、setattr()设置对象的某个属性值,该属性如果不存在,创建后赋值。
setattr(object, name, value)
一般setattr()可以配合hasattr(), 判断是否有该属性,没有的话就进行赋值。
>>> if not hasattr(a,"B"):
... setattr(a,"B",200)
... getattr(a,"B")
...
200
4、delattr() 删除对象的某个属性。
delattr(object,name)
这个函数是没有返回值,所以要用还是加上打印信息比较好。
二、python类和对象的介绍
1、定义
python是面向对象的语言,这是开始学python都知道的概念,但是什么是对象呢?
要先从类开始说,类是具有相同属性和方法的对象的集合,它定义这些对象共有的属性和方法,也就是代码中的class,就是上文中的test类。
对象就是类的实例化,从代码角度来说,就是定义好类之后,令一个变量等于这个类,就完成了对象的实例化,就是上文中的a对象。
方法就是类中的函数,如上文的run方法。
2、在类中需要注意的是"self", 它其实代表了实例,也就是实例化的对象,对self的操作代表了对实例后对象的操作。其实个人觉得就是代表对象的参数。在类中的方法必须有一个额外的参数,一般而言会定义为"self"。在普通的函数是不需要的
3、在类中初始化方法时,一般会有__init()__方法,实例化这个类的对象会调用这个方法,也是通过此方法来接收参数。
4、对于类的属性,可以分为定义的属性和python内置的类属性。 python内置的类属性大体有:
__dict__:类的属性,返回值是一个字典,由类的数据属性组成。
__doc__: 文档说明,返回查询类或者函数定义的第一段注释文档。 注意是紧跟后面的注释文档,一般起到说明帮助的作用。可以配合docopt来使用,具体方法请参考:docopt。
class test():
"""help"""
"""not help"""
def __init__(self):
"""not help"""
简单例子就是当你打印test.__doc__时,只会出现help,后面的注释内容不会出现。
其他的属性就不介绍了。
其实通过dir(class) ,class代表要查询的类名,就可以得到这个类所有的属性。