有时我需要更改已在其余代码中广泛使用的 Python 类属性的名称。
问题是由于各种原因,我可能会错过一些旧名称出现在赋值语句中的地方,例如class_instance.old_attribute_name = something
. 例如:
class theClass:
def __init__(self):
self.new_attribute_name = 0
o = theClass()
o.new_attribute_name += 3
if o.new_attribute_name > 3 or o.new_attribute_name < 4:
o.old_attribute_name = 7
do_stuff_with(o.new_attribute_name)
问题是这很难发现,不会产生错误,只会创建一个无用的属性。我考虑过使用__slot__
,但感觉像是将我根深蒂固的 C/C++ 思维方式强加在 Python 上。
所以我想问一下,我在这里做错了什么?如果我尝试(以某种方式)阻止在实例化之外创建属性,我会失去什么?处理杂散属性分配的pythonic方法是什么?