• python类的内置属性,原本具足,无需人为干预


    Python 进阶 - Python类的内置属性:https://blog.csdn.net/Aaron_neil/article/details/120326444

    内置属性:当创建一个类后,类所自带的属性,叫类的内置属性。

    " 注意:有的属性是只有类有,有的属性是类和对象都有!"

    属性 含义

    __name__	当前定义的【类】的名字
    __module__	【类或对象】所属的模块名
    __dict__	【类或对象】的属性(包含一个字典,由类的数据属性组成)
    __doc__	【类或对象】的文档字符串 - 一般写在class 类下面
    __base__	当前【类】的父类
    __bases__	当前【类】所有父类构成的元组
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例:

    class Person:
        """A class name Person"""
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    p1 = Person('Aaron', 20)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1. name : 返回当前定义的【类】的名字

    print(Person.__name__)  # 输出:Person
    
    • 1

    2. module: 返回当前【类或对象】所在模块的名字

    print(Person.__module__) # 输出:__main__
     
    print(p1.__module__) # 输出:__main__
    
    • 1
    • 2
    • 3

    3. dict: 【类或对象】的属性(包含一个字典,由类的数据属性组成)

    print(Person.__dict__) 
    # 输出
    {
        '__module__': '__main__', 
        '__doc__': 'A class name Person', 
        '__init__': <function Person.__init__ at 0x7f46262ff700>, 
        '__dict__': <attribute '__dict__' of 'Person' objects>, 
        '__weakref__': <attribute '__weakref__' of 'Person' objects>
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    print(p1.__dict__) 
    # 输出
    {
        'name': 'Aaron', 
        'age': 20
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4. doc:【类或对象】的文档字符串 。一般写在class 类下面,对该类进行一些注释和说明,但是一般只会类来引用这个属性,很少有用对象来引用的。

    print(Person.__doc__) # 输出:A class name Person
     
    print(p1.__doc__) # 输出:A class name Person
    
    • 1
    • 2
    • 3

    5. base:当前【类】的父类

    print(Person.__base__) # 输出:<class 'object'>
    
    • 1

    6. bases:当前【类】的所有父类构成的元组

    print(Person.__bases__) # 输出:(<class 'object'>,)
    
    • 1

    内置属性

    7、file

    在pycharm中,__file__会返回当前文件的绝对路径,而在终端直接运行时,则返回的是文件本身(这是个坑。。在IDE开发的时候运行正常,上线就出问题)。

    pycharm:print(__file__) # F:/test_demo/demo.py
    
    终端: python demo.py    # 会输出 demo.py
    
    • 1
    • 2
    • 3

    所以要使用绝对路径的话,推荐使用 os.path.abspath(file),这种写法在终端与pycharm中输出的都是绝对路径

    8、name

    表示当前模块的名称,如果为main,表示为顶层模块,能够调用其他非main的模块,并且可运行。如果为非main,则无法运行,只能用来做导入使用(相信大多数同学都试过,在启动项目时,通常只有入口文件可以启动,单独运行项目中其他某个py文件,是无法运行的,而且,在入口文件中,不能存在相对导入包的方式,就是因为该文件为顶层模块,而项目的其他py文件可以存在相对导包的方式)。

    还可以用来返回类、实例、函数名等(这个没啥用~,了解即可):

    class B:
        pass
     
    print(B.__name__) # B
    def a():
        pass
     
    print(a.__name__) # a
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    9、mro

    返回继承顺序:

    class B(object):
        pass
     
    class A(B):
        pass
     
    print(A.__mro__) # (<class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果只是单继承,继承层次不深的话很好理解,但其实并不是单纯的从下到上的顺序,感兴趣的同学可以去了解一下,这里就不展开了。

  • 相关阅读:
    【Python黑科技】获取每日一句美句,并定时发送邮件到指定邮箱(保姆级图文+实现代码)
    【51单片机实验笔记】中断篇(一) 外部中断
    oauth2单点登录集成
    基于Web的足球青训俱乐部管理后台系统的设计与开发
    Java中的ArrayList集合
    PMP每日一练 | 考试不迷路-9.16(包含敏捷+多选)
    全屋Wi-Fi:一个谁也解决不好的痛点?
    重学java 20.面向对象 继承 下
    C++ 类和虚函数
    开源高性能 RISC-V 处理器“香山”国际亮相;Apache Log4j 远程代码执行漏洞;DeepMind 拥有 2800 亿参数的模型 | 开源日报
  • 原文地址:https://blog.csdn.net/qq_15821487/article/details/126669175