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

  • 相关阅读:
    Kotlin入门(20)几种常见的对话框
    Kotlin入门(19)Android的基础布局
    Kotlin入门(18)利用单例对象获取时间
    Kotlin入门(17)等式判断的情况
    Kotlin入门(16)容器的遍历方式
    Kotlin入门(15)独门秘笈之特殊类
    Android Studio Gradle被墙bug总结
    unity常用的坐标系转换
    欧拉角与万向节死锁
    Unity导出Gradle工程给Android Studio使用
  • 原文地址:https://www.cnblogs.com/andy9468/p/9718949.html
Copyright © 2011-2022 走看看