zoukankan      html  css  js  c++  java
  • 魔法变量和魔法方法:__变量__、__方法__

    目录:

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

    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

  • 相关阅读:
    良许 | 同事的一个动作,让我熬夜的工作全部白费……
    良许 | 命令的输出不会保存?居然连 tee 命令都不会用!
    良许 | 从命令行同时移动多个文件类型的小技巧
    良许Linux | Linux学习方法及学习资料汇总
    JAVA基础篇 之 方法的重载
    Spring学习笔记(八)Spring Data JPA学习
    java基础篇 之 位运算符
    Spring Cloud Stream学习(五)入门
    SpringCloudStream学习(四)TTL(存活时间)Dead Letter Exchanges(死信交换机)
    SpringCloudStream学习(三)RabbitMQ中的惰性队列
  • 原文地址:https://www.cnblogs.com/andy9468/p/9718949.html
Copyright © 2011-2022 走看看