简单而优雅
人活着就是累,简称人类。开个玩笑,活的简单一些也挺好。
人的一些基本属性,简单来说就是 姓名、年龄、性别,就用这三个吧。
如果要对一些人进行描述,可以使用类、使用数组、使用字典。
类
class Person(object):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def __str__(self):
return "name:%s \n" % self.name \
+ "age:%s \n" % self.age \
+ "sex:%s \n" % self.sex
if __name__ == '__main__':
# test_field_names_str()
person_class = Person("张三", 18, "难")
print(person_class)
# 获取名字
print(person_class.name)
数组
person_list = [
["张三", 18, "难"]
,["李四", 28, "女"]
]
# 获取名字
name = person_list[0][0]
字典
person_dict = {
"person_01": {
"name": "张三",
"age": 18,
"sex": "难",
},
"person_02": {
"name": "李四",
"age": 28,
"sex": "女",
},
}
# 获取名字
name = person_dict["person_01"]["name"]
这三种对person 的处理都可以,但也有优缺点。
- 类:比较庞大,而且如果只是属性读写,有点大材小用
- 列表:相较于类小了,但是读写稍有不便,需要通过索引获取值,不利于维护
- 字典:和列表类似,不便于维护
除了这三种方式,难道就没有其他的简单而优雅的实现吗?
当然是有的,namedtuple !!!从名字看named tuple,有名字的元组。
from collections import namedtuple
def test_field_names():
field_names_str = "name,age,sex"
Person = namedtuple("Person", field_names_str)
person_01 = Person("张三", 18, "难")
print(person_01.name)
field_names_list = ["name", "age", "sex"]
Person = namedtuple("Person", field_names_list)
person_01 = Person("张三", 18, "难")
print(person_01.name)
# 像元组一样使用
print(person_01[0])
# 解包
name,age,sex = person_01
print(name,age,sex)
# namedtuple 转成字典
person_dict = person_01._asdict()
print(person_dict)
# 字典转成 namedtuple
person_02 = Person(**person_dict)
print(person_02.name)
# 替换,返回一个新的 namedtuple
person_03 = person_02._replace(name="李四")
print(person_03.name)
if __name__ == '__main__':
test_field_names()
到此结 DragonFangQy 2022.4.1