Faker原意为骗子,此处表示一种能够构造仿造数据的模块。
1. 安装
pip install Faker --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
2. 导入
from faker import Faker
3. 核心功能
3.1 生成姓名
from faker import Faker
faker = Faker()
en_name = faker.name()
print(en_name)
# locale可以配置本地化,默认为
faker = Faker(locale='zh_CN')
cn_name = faker.name()
print(cn_name)
其结果为:
Ashley Smith
徐秀云
看源代码能知道其locale
值可以接收str,可迭代的类型如list/set/tuple, 以及特殊的排序字典OrderDict,其默认值为'en_US',此外其本地化的分隔符使用'-' / '_' 均可以
3.2 生成详细的地址
def faker_address():
faker = Faker()
en_address = faker.address()
print(en_address)
print()
faker = Faker(locale='zh_CN')
cn_address = faker.address()
print(cn_address)
运行结果
522 Anthony Glens
West Donaldtown, VT 59398
澳门特别行政区潮州市花溪重庆路h座 406479
- 此时,大家可以尝试一下通过pycharm点击address方法,会发现无法进入对应的方法。但为什么能获取的值呢。让我们一个Debug看一下
- 上图可以发现其调用对应的属性时,实际是去调用了getattribute方法,
getattribute是属性访问拦截器,就是当这个类的属性被实例访问时,会自动调用类的getattribute方法
- 继续调用会发现,其调用getattr方法,并通过attr参数返回对应的工厂中的随机值
Tips: 无论属性是否存在,都会先调用getattribute 方法;在调用getattribute 方法获取不到属性时,才会去调用getattr方法
-
切回去看factories如何生成的,其调用Factory的类方法实现provider收集
既默认情况下回收集如下的provider