• 类的特殊属性



    __doc__

    类名.__doc__时触发执行,查看类的注释信息,注释信息无法继承。

    class Person:
        """
        该类注释信息
        """
        
    print(Person.__doc__)
    该类注释信息
    

    直接写注释信息相当于定义了个__doc__ = """该类的注释信息""",所以可以不用写pass,语法也是正确的。


    __name__

    类名.__name__时触发执行,返回类名。

    class A:
        pass
    
    a = A()
    print(type(a).__name__)
    
    A
    

    __module__

    对象.__module__时触发执行,返回对象所在的模块名。

    class A:
        pass
    
    a = A()
    print(A.__module__)
    
    __main__  # 表示当前文件
    

    __class__

    仅新式类中,对象.__class__时触发执行,返回对象所属的类。与type()所得到的结果相同。

    class A:
        pass
    
    a = A()
    print(A.__class__)
    print(a.__class__)
    print(type(a))
    
    <class 'type'>
    <class '__main__.A'>
    <class '__main__.A'>
    

    __slots__

    slots是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性)。
    使用点来访问属性本质就是在访问类或者对象的dict属性字典(类的字典是共享的,而每个实例的是独立的)。

    class People:
        __slots__ = ['name','age']
    
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    
    p = People('libai',18,)
    
    
    # p.sex = 'male'  对象不能再定义独自的属性
    # print(p.__dict__)  使用了slots,对象就没有__dict__
    print(p.__slots__)  # 可以查看类的__slots__属性.
    

    __slots__的作用:

    • 1、限制对象的属性。
    • 2、当实例很多,但属性很少,使用slots能节省内存。

    类每生成一个对象,对象有自己的dict,如果对象自身有很多属性,(对象越多)这样占用的内存空间就很多,使用了slots后,所有的对象,都使用类名称空间中的属性,对象越多,越节省内存。


    #python为类内置的特殊属性
    类名.__name__ # 类的名字(字符串)
    类名.__base__ # 类的第一个父类
    类名.__bases__ # 类所有父类构成的元组,仅查看直接父类。
    类名.__dict__ # 类的属性字典
    

    参考文档:

    https://docs.python.org/zh-cn/3/reference/datamodel.html?highlight=eq#object.eq

  • 相关阅读:
    Vue2020
    Vue2020
    Vue v-model双向数据绑定 的实现
    TCP 粘包
    黑幕模板
    STL总结与例子
    中缀表达式转后缀表达式
    php 转换数组里的时间戳
    gorm踩过的坑
    WxJava使用lettuce客户端的redis实现微信access_token等接口重复利用
  • 原文地址:https://www.cnblogs.com/ChiRou/p/14238104.html
Copyright © 2020-2023  润新知