- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在研究Python中类级变量的风险,我认为列表作为类级变量的风险可以用元组来解决,例如空元组。
采取:
class BaseClass(object):
default_sth = []
def foo(self):
for sth in self.default_sth:
pass
这是有风险的,因为:
class SubClass(BaseClass):
pass
a = SubClass()
a.default_sth.append(3)
print(BaseClass.default_sth) # [3]
使用 None
代替空元组(tuple()
?)可能会很危险,因为它在迭代时会失败。
由于不变性,我认为这是一个不错的选择,但我认为我没有在任何地方看到有人谈论过这个问题。你认为这个推理有什么缺陷吗?是Python风格的吗?
最佳答案
您将类变量与实例变量混淆了(这很容易做到,因为在没有初始化实例变量的情况下,查找会找到类变量)。在这种情况下,当您打算为实例变量设置默认值时,您已经明确表示 default_sth
是一个类变量。改用这个:
class BaseClass(object):
def __init__(self, sth=None):
if sth is None:
sth = []
def foo(self):
for sth in self.sth:
pass
您可能会对使用“硬编码”默认值感到犹豫,但您只是通过尝试为默认值使用单独的名称来增加冗长性。只需注释并记录您的 __init__
方法,以指示 sth
是什么以及如果没有,其默认值应该是什么其他值被传递。除非您有充分的理由,否则不要尝试使默认值本身可配置。
就不变性而言,只有元组是不可变的,引用它的名称不可变。没有什么可以阻止某人使用您的原始代码并说
BaseClass.default_sth = []
尽管将 default_sth
作为一个元组开始,但您又回到了开始的地方。
关于python - Python 中空元组的潜在用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705095/
这个问题已经有答案了: How does a for loop work, specifically for(;;)? (6 个回答) 已关闭 7 年前。 我正在查看 java.util.Random
平台:x32 上的 .NET Framework 3.5 SP1 在代码中留下空语句(“;”本身)是否存在任何性能问题? 要标记为答案,您是否还会教一个人(我?和其他阅读本文的人)钓鱼?意思是,如何确
我找到了有关在选中时更改实际复选标记颜色的说明,但我正在尝试弄清楚如何更改框的颜色。 我把盒子放在较暗的背景上,很难看清,所以我想让它变亮。 我已经尝试了大多数其他元素在 Materialise 中观
在 Java 中,如何生成空/“nil”的实例 java.util.UUID所有 128 位都为零的对象? 00000000-0000-0000-0000-000000000000 Nil UUID
我有一个带有 ListView 和另一个 Activity 的选项卡。那是我的代码: TabHost tabHost = getTabHost(); TabHost.TabSpec spec; I
当我做计算机科学圈第14章的题时,我发现了一些奇怪的事情。 问题说:“定义一个函数 postalValidate(S),它首先检查 S 是否代表有效的邮政编码:首先,删除所有空格;余数必须采用 L#L
clearfix div 中空注释的目的是什么?我假设这是针对某种较旧的浏览器填充程序;不确定你为什么要四处乱放空评论。似乎只有一两个 CSS 规则会更容易维护。 最佳答案 如果网站使用 displa
我在 IE8 中的 z-index 有问题(其他 IS 尚未测试): 以下 JS 创建了一些 html/css: document.write(''); document.write(' '
我是一名优秀的程序员,十分优秀!