python 类的特殊属性和方法
- python类有很多内建的属性和方法,可以通过dir查看,这些属性是系统自带的,不需要额外导入包;见下图1
- 这些变量都是全局变量,可以用globals()查看当前系统可用的全局变量!!!但这个和python类的内建函数不是同一个概念,见下面的代码
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 10, 'AA': <class '__main__.AA'>, 'xx': {...}}
一 、python 类的特殊属性
1. __name__
if __name__ == '__main__':这句估应该很熟悉
1:__name__是一个变量。加双下划线是因为这是一个标识模块的系统变量。普通变量不要使用此方式命名变量。
2:Python有很多模块,这些模块是可以独立运行的。
3:__name__ 假如当前模块是主模块,那么此模块名字就是__main__,通过if判断这样就可以执行 “__mian__:” 后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字,通过if判断这样就会跳过 “__mian__:” 后面的内容。
这里的my是一个py文件,里面可以是类,也可以是普通函数,输出的__name__其实就是py文件的名字,而不是py文件里的类名!
2. __bases__
1. Python 为所有类都提供了一个 bases 属性,通过该属性可以查看该类的所有直接父类,该属性返回所有直接父类组成的元组。注意是直接父类!!!
2.是类的属性,不是实例化对象的属性,实例化对象没有该属性。
3.__class__
1. __class__功能和type()函数一样,都是查看对象所属的类。
2. __class__可以嵌套使用
4.__dict__
1. python 一切皆对象,对象即有__dict__,但是每个类或对象都有自己的__dict__
2. 子类继承父类的对象,父类的__dict__ 不会影响子类的__dict__;子类的的__dict__是 self变量
二、类方法
方法 |
功能说明 |
__new__() |
类的静态方法,用于确定是否要创建对象 |
__init__() |
构造方法,创建对象时自动调用 |
__del__() |
析构方法,释放对象时自动调用 |
__add__() |
+ |
__sub__() |
- |
__mul__() |
* |
__truediv__() |
/ |
__floordiv__() |
// |
__mod__() |
% |
__pow__() |
** |
__eq__()、 __ne__()、__lt__()、 __le__()、__gt__()、 __ge__() |
==、 !=、 <、 <=、 >、 >= |
__lshift__()、__rshift__() |
<<、>> |
__and__()、__or__()、__invert__()、__xor__() |
&、|、 ~、^ |
__iadd__()、__isub__() |
+=、-=,很多其他运算符也有与之对应的复合赋值运算符 |
__pos__() |
一元运算符+,正号 |
__neg__() |
一元运算符-,负号 |
__contains__ () |
与成员测试运算符in对应 |
__radd__()、__rsub__() |
反射加法、反射减法,一般与普通加法和减法具有相同的功能,但操作数的位置或顺序相反,很多其他运算符也有与之对应的反射运算符 |
__abs__() |
与内置函数abs()对应 |
__bool__() |
与内置函数bool()对应,要求该方法必须返回True或False |
__bytes__() |
与内置函数bytes()对应 |
__complex__() |
与内置函数complex()对应,要求该方法必须返回复数 |
__dir__() |
与内置函数dir()对应 |
__divmod__() |
与内置函数divmod()对应 |
__float__() |
与内置函数float()对应,要求该该方法必须返回实数 |
__hash__() |
与内置函数hash()对应 |
__int__() |
与内置函数int()对应,要求该方法必须返回整数 |
__getattribute__() |
获取对象指定属性的值,如果同时定义了该方法与__getattr__(),那么__getattr__()将不会被调用,除非在__getattribute__()中显式调用__getattr__()或者抛出AttributeError异常 |
__setattr__() |
设置对象指定属性的值 |
__subclasses__() |
返回该类的所有子类 |
__call__() |
包含该特殊方法的类的实例可以像函数一样调用 |
__get__() |
定义了这三个特殊方法中任何一个的类称作描述符(descriptor),描述符对象一般作为其他类的属性来使用,这三个方法分别在获取属性、修改属性值或删除属性时被调用 |
__set__() |
|
__delete__() |