python 类的特殊属性和方法

2022-06-22 11:57:15
  • 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__()

  • 作者:青果HA
  • 原文链接:https://blog.csdn.net/Strive_0902/article/details/106966142
    更新时间:2022-06-22 11:57:15