priestpdawiki 发表于 2017-8-13 18:22:08

问一个python的问题,虽然和字典无关,但咱论坛高人多呀

python中,如果从一个类批量实例化对象,这些对象的变量名该怎么写?


假设, 我从一个 "人类",批量生成一个班级的实例化对象(假设有40人,我把这些名字放在一个列表中), 这些实例化的对象的变量名,应该就是每个同学的名字, 但是用for循环的话, 怎么命名这些实例呢? 如何能把列表中的元素的值, 变成每个实例的变量名呢?


--------------------------------------

list_全班姓名表 = [...]


class 人类(object):

   def __init__(self,姓名)


for 姓名 in list_全班姓名表:

   实例化对象的变量名怎么取??? = 人类(姓名)

-------------------------------------


如果我这个思路不对, 那批量实例化时, 这些实例的变量名该怎么取?

slide 发表于 2017-8-13 21:40:18

本帖最后由 slide 于 2017-8-13 21:48 编辑

感觉你要表达的意思是,一个人类的类包含一个叫姓名的data attribute,而人类的实例中的那个姓名变量的值则是这个人的名字,对吧?
这样的话每个实例给什么变量名就不重要,甚至可以不给。

wantyu 发表于 2017-8-13 23:20:39

[人类(姓名) for 姓名 in list_全班姓名表]

priestpdawiki 发表于 2017-8-15 15:06:38

wantyu 发表于 2017-8-13 23:20
[人类(姓名) for 姓名 in list_全班姓名表]

把所有的实例放在了一个列表中

priestpdawiki 发表于 2017-8-15 15:10:13

slide 发表于 2017-8-13 21:40
感觉你要表达的意思是,一个人类的类包含一个叫姓名的data attribute,而人类的实例中的那个姓名变量的值则 ...

嗯, 主要是考虑到如果没有名字, 如何区分来调用这一堆实例的问题. 不过我现在已经有答案了,的确可以通过列表中的索引来调用, 虽然列表这个方法还是有一些别扭,因为必须记住不同索引号和姓名的一一对应关系. 不过如果换做字典来存储,会更好些

csw016 发表于 2017-8-18 21:47:28

"通过列表中的索引来调用" -- 是否要考虑效率的问题? 将来你的系统一旦要扩大(scale up)呢?

前面有朋友提到用 list comp -- [ processing_x for x in y ],这个效率会大大高于 for loop的。但这个只能做一点简单的处理吧。
如果顺序不是很重要 可以考虑使用set.

“不过如果换做字典来存储,会更好些” -- 是的,dict 的存储方式, 使得读取的效率大大提高。

lxchen2001 发表于 2017-10-24 04:39:48

姓名 = 人类(姓名)

如果英文的话,可以用
姓名.lower() = 人类(姓名)
页: [1]
查看完整版本: 问一个python的问题,虽然和字典无关,但咱论坛高人多呀