魔法变量和魔法方法:__变量__、__方法__
目录:
一、魔法变量(__变量__)
1、__dict__ 属性:
2、__doc__ 属性:
3、__bases__ 属性:
4、__class__ 属性:
5、__name__ 属性、变量:
6、__slots__ 属性:
7、__all__ 变量:
二、魔法方法(__方法__)
1、__repr__() 方法:
2、__str__() 方法:
3、__del__() 方法:
4、__getattrbute__() 方法:
5、__new__() 方法:
6、__init__() 方法:
一、魔法变量(__变量__)
1、__dict__ 属性:
实例的全部实例属性,是一个字典
2、__doc__ 属性:
类和函数的说明文档的内容
3、__bases__ 属性:
类的所有父类
4、__class__ 属性:
查看实例对象的类是谁
5、__name__ 属性、变量:
返回模块文件名;或者返回类名
在mya.py中
class A(object): pass print("=====1:类名=====") print(A.__name__) if __name__ == '__main__': print("=====2:文件名=====") print(__name__) print("=====3:文件名=====") print(__name__)
运行mya.py的结果
=====1:类名===== A =====2:文件名===== __main__ =====3:文件名===== __main__
在myb.py中
from mya import *
运行myb.py的结果
=====1:类名===== A =====3:文件名===== mya
6、__slots__ 属性:
(也是类属性)用于限定实例属性名。
__slots__的作用范围:
起作用对象:实例属性(仅对当前类的对象起作用,子类对象不起作用)
不起作用对象:
1 、类属性
2 、实例方法
3 、子类的实例对象的实例属性
__slots__的例子:
class Person(object): __slots__ = ('name', 'age',) def __init__(self): self.name = "zs" self.age = 100 class Student(Person): def __init__(self): super(Student, self).__init__() self.sex = "man" p1 = Person() print(p1.name) # s1 = Student() # print(s1.sex)
输出:
zs
如果__slots__的元组中没有申明__init__()方法中的所有属性名称,就会报错。
7、__all__ 变量:
__all__ 不属于类,所以不是属性,是变量。用于限定是否被其他模块*号导入变量和方法的列表名单。
例子
在mya.py中
__all__=['aa','bb'] aa=1 bb=2 cc=3
在myb.py中
from mya import * print(aa) print(bb) print(cc)
运行myb.py
输出:
Traceback (most recent call last): File "D:/zzl/new_work/tmp/myb.py", line 4, in <module> print(cc) NameError: name 'cc' is not defined 1 2
二、魔法方法(__方法__)
1、__repr__() 方法:
输出针对机器易识别的格式
2、__str__() 方法:
输出针对人易识别的格式
3、__del__() 方法:
析构:对象被销毁时,自动调用
4、__getattrbute__() 方法:
属性拦截器
5、__new__() 方法:
先于__init__()方法,专用于创建对象
6、__init__() 方法:
初始化对象时,自动调用执行
延伸:
1、下划线、私有变量 https://www.cnblogs.com/andy9468/p/8299448.html
2、当我们执行模块代码时首先会加载__init__.py 定义的引入模块,然后进入__mian__.py 文件运