目录:
一、魔法变量(__变量__)
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 文件运