如果昨日文章没能跟上阅读,这里是传送门,
Python中对象的创建与引用
。不必客气,开始今天的内容吧。
本次内容
一、自定义属性
属性是类或者对象存储数据的地方,而数据又是最核心的部分,这里我们对属性进一步探讨分析。
1、属性分类
在类中,方法外定义的属性为类属性,存储在类空间中,独一份,可共享,在实例方法中以self方式定义的属性为实例属性,存储在实例空间中,每个实例拥有自己的实例属性,不共享。实例属性只能通过实例来调用,类属性可以通过类调用,也可以通过实例来调用,那么我们要知道,在使用属性时,查找的顺序是就近原则,先从对象存储空间查找,找到则停止继续查找,没有就进去类空间查找,找到则停止查找,没找到则报异常。如果存在实例属性与类属性同名时,通过实例调用该属性名,则调用的是实例属性。
2、属性操作1)、添加
通过: 类|对象.属性 = 值 或 setattr(obj, name, value)
使用setattr(obj, name, value)内置函数设置属性值
2)、删除
del 类|对象.属性 或 delattr (类|对象, 属性),由于共享的原因,删除类的属性后,任何实例都不能再使用该属性,删除对象的属性后,本对象不能再使用该属性
删除类属性
3)、获取
对象|类.属性、getattr(对象, 属性名),如果此属性不存在,那么就会报错
4)、判断
使用内置函数hasattr(obj, name)判断
二、内置类属性
1.__dict__
获取类或对象的属性(包含一个字典)
测试
我们在序列化对象时,就可以使用__dict__
测试:
使用json.dumps的第二个参数default 指定序列化的字典属性即可
同理反序列化,使用object_hook参数:
2.__doc__
文档字符串与之前的函数中文档注释同理,即定义在类的下面使用成对单引号、成对双引号、成对三个单引号和成对三个双引号(推荐),解释其功能,方便他人理解。
就是注释啦!可以生成help信息。
3.__name__
获取类名
4.__module__
获取当前类所在的模块名称,如果是自身模块为__main__,如果是被引入的模块,则为它自身的模块名。
a、调用自身的__module__
结果:
b、其他引入的__module__
结果为:
结果为该类所在的模块名称。
注意:
在一个模块中如果__name__ == ‘__main__’时,这时就相当于c语言中的main()方法,__name__属性直接使用,则是获取当前模块的名称,或是在当前模块使用是返回值为__main__,若是被导入其他模块,该值等于模块的名称。
5.__bases__
获取当前类的所有继承的父类,以元组返回父类。
结果:
多继承代码:
结果:
接下来,视频奉上:
内置属性dict
内置属性doc+name