Python奇思妙想(胡思乱想)

1.一道简单习题引发的思考深坑(通过globals及字典推导式获取类实例化了哪些对象)

  初衷就是为了打印如下的信息:

小明,10岁,男,最爱大保健
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,最爱大保健
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健

  考察的就是类对象调用类的静态字段及对象属性和对象方法;但是我头铁,非要获取这个类都实例化了哪些个对象,都添加到一个容器,让他们循环打印。如此便有了如下的尝试,最终get了通过globals及字典推导式完美解决。

 1 class Person:
 2     hobby_lst = ['最爱大保健', '开车去东北', '最爱大保健']
 3 
 4     def __init__(self, name, age, sex):
 5         self.name = name
 6         self.age = age
 7         self.sex = sex
 8 
 9 
10 xm = Person('小明', '10岁', '')
11 ll = Person('老李', '90岁', '')
12 lz = Person('老张', '108岁', '男仙')
13 jj = Person('俊杰', '30岁', '')
14 dic = globals()  # 获取全局的所有变量及方法
15 # lst = [i for i in dic if isinstance(dic[i], Person)]#开始天真的以为拿到每个对象名就好了,后来发现你拿到的是字符串,并不能调用对象的属性
16 dic1 = {k: v for k, v in dic.items() if isinstance(dic[k], Person)}  # 故而改成了字典里面为对象名的字符串对应它的内存地址,这下就可以玩了
17 for i in dic1.values():
18     for j in Person.hobby_lst:
19         print(f'{i.name},{i.age},{i.sex},{j}')
不玩不知道,都是坑

猜你喜欢

转载自www.cnblogs.com/changwentao/p/9239713.html
今日推荐