作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经开始迈出学习 Python 的第一步,并且正在尝试开始使用类。
到目前为止我有这个简化版本:
class ThingsInTheFridge(object):
def __init__(self):
self.milk = False
self.yogurt = False
self.bread = True
self.umbrella = True
我的课上大约有 30 件事,每件事都被分配为 True 或 False(我已经缩短了这个问题的 list )。
分配它们的最有效方法是什么?
我考虑过这个,但它似乎并没有改善事情,尤其是当列表的大小增加时:
self.milk, self.yogurt = False, False
编辑:我也许应该提到类里面还有其他项目(我省略了它们,因为我认为这无关紧要):
class ThingsInTheFridge(object):
def __init__(self):
self.milk = False
self.yogurt = False
self.bread = True
self.umbrella = True
self.bulb = "maker name"
self.shoes = 2
最佳答案
如果您真的关心运行时效率,那么几乎可以肯定您找错地方了。如果初始化你的成员花费的时间太长(这不太可能......但如果你分析并发现这是热点......),正确的答案是使用 __slots__
,而不是改变您进行初始化的方式。
如果您关心程序员效率(可读性,以及较小程度上的可写性),您总是可以这样做:
self.milk = self.yogurt = False
如果你想更动态地做事,你可以用 setattr
做这样的事情,但我不推荐它:
class ThingsInTheFridge(object):
false_things = ('bread', 'umbrella')
true_things = ('milk', 'yogurt')
def __init__(self):
for thing in ThingsInTheFridge.false_things:
setattr(self, thing, False)
for thing in ThingsInTheFridge.true_things:
setattr(self, thing, True)
我不推荐它的原因是,如果你需要在这个级别动态地做事,你也可能需要在访问级别是动态的,这意味着你真的应该使用 dict
或 set
,如 Lattyware 所述。
你也可以走极端,在类式系统之上为自己构建一个原型(prototype)式 OO 系统,或者创建一个元类,根据类信息等初始化实例,但是,正如这句话的开头所示,那就太过火了。
关于python - Python中定义类时,如何给多个变量赋一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694050/
我是一名优秀的程序员,十分优秀!