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}')