Python 进阶 - Python类的内置属性:https://blog.csdn.net/Aaron_neil/article/details/120326444
" 注意:有的属性是只有类有,有的属性是类和对象都有!"
属性 含义
__name__ 当前定义的【类】的名字
__module__ 【类或对象】所属的模块名
__dict__ 【类或对象】的属性(包含一个字典,由类的数据属性组成)
__doc__ 【类或对象】的文档字符串 - 一般写在class 类下面
__base__ 当前【类】的父类
__bases__ 当前【类】所有父类构成的元组
示例:
class Person:
"""A class name Person"""
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person('Aaron', 20)
print(Person.__name__) # 输出:Person
print(Person.__module__) # 输出:__main__
print(p1.__module__) # 输出:__main__
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>
}
print(p1.__dict__)
# 输出
{
'name': 'Aaron',
'age': 20
}
print(Person.__doc__) # 输出:A class name Person
print(p1.__doc__) # 输出:A class name Person
print(Person.__base__) # 输出:<class 'object'>
print(Person.__bases__) # 输出:(<class 'object'>,)
内置属性
在pycharm中,__file__会返回当前文件的绝对路径,而在终端直接运行时,则返回的是文件本身(这是个坑。。在IDE开发的时候运行正常,上线就出问题)。
pycharm:print(__file__) # F:/test_demo/demo.py
终端: python demo.py # 会输出 demo.py
所以要使用绝对路径的话,推荐使用 os.path.abspath(file),这种写法在终端与pycharm中输出的都是绝对路径
表示当前模块的名称,如果为main,表示为顶层模块,能够调用其他非main的模块,并且可运行。如果为非main,则无法运行,只能用来做导入使用(相信大多数同学都试过,在启动项目时,通常只有入口文件可以启动,单独运行项目中其他某个py文件,是无法运行的,而且,在入口文件中,不能存在相对导入包的方式,就是因为该文件为顶层模块,而项目的其他py文件可以存在相对导包的方式)。
还可以用来返回类、实例、函数名等(这个没啥用~,了解即可):
class B:
pass
print(B.__name__) # B
def a():
pass
print(a.__name__) # a
返回继承顺序:
class B(object):
pass
class A(B):
pass
print(A.__mro__) # (<class '__main__.A'>, <class '__main__.B'>, <class 'object'>)。
如果只是单继承,继承层次不深的话很好理解,但其实并不是单纯的从下到上的顺序,感兴趣的同学可以去了解一下,这里就不展开了。