魔法变量和魔法方法:__变量__、__方法__

目录:

一、魔法变量(__变量__)

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 文件运

https://www.cnblogs.com/brownz/p/8352415.html

posted @ 2018-09-28 15:36  安迪9468  阅读(568)  评论(0编辑  收藏  举报