类包含的部分:
类的组成部分可以分为三大类:字段、方法和属性
字段中可以分为:普通字段和静态字段
方法可以分类:普通方法、类方法、静态方法
属性:普通属性
普通字段属于对象
静态字段属于类
这两个字段最本质的区别就是在内存中保存的位置不同
静态字段在内存中只保存一份
普通字段在每个对象中都要保存一份
方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,只是调用方式不一样
相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中只保存一份。
不同点:方法调用者不同、调用方法时自动传入的参数不同。
python中的属性就是普通方法的变种。
1.属性的基本使用
属性的定义和调用需要注意以下几点:
定义时,在普通方法的基础上添加@property装饰器,属性仅有一个self参数
调用时,无需括号
方法:foo_obj.func()
属性:foo_obj.prop
注意:属性存在的意义:访问属性时可以制造出和访问字段完全相同的假象
2.属性的两种定义方法
2.1 装饰器:在方法上应用装饰器(见上例)
2.2 静态字段:在类中定义值为property对象的静态字段
此外,还有三种@property装饰器
实例:
property的构造方法中有个四个参数
第一个参数是方法名,调用 对象.属性 时自动触发执行方法
第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
第四个参数是字符串,调用 对象.属性.doc ,此参数是该属性的描述信息
类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式:
公有成员,在任何地方都能访问
私有成员,只有在类的内部才能方法
私有成员命名时,前两个字符是下划线。
静态字段
公有静态字段:类可以访问,类内部可以访问,派生类可以访问
私有静态字段:仅类的内部可以访问
普通字段
公有普通字段:对象可以访问,类内部可以访问,派生类也可以访问
私有普通属性:仅类内部可以访问
方法、属性的访问与上述方法类似,即:私有成员只能在类内部使用
上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况,Python的类成员也是如此,存在着一些具有特殊含义的成员,详情如下:
1.__doc__
表示类的描述信息
2.__module__和__class__ __module__表示当前操作的对象在哪个模块 __class__表示当前操作的类的对象是什么
3.__init__ 构造方法,通过类创建对象时,自动触发执行
4.__del__ 析构方法,当对象在内存中被释放时,自动触发执行。 注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
5.__call__ 对象后面加括号,触发执行。 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
6.__dict__ 类或对象中的所有成员
7.__str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
8. __getitem__、__setitem__、__delitem__ 用于索引操作,如字典。以上分别表示获取、设置、删除数据
9. __iter__ 用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 __iter__