有时我需要更改已在代码的其余部分中广泛使用的 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 方法是什么?
最佳答案
您可以将旧属性名称设为属性
class theClass(object):
def __init__(self):
self.new_attribute_name = 0
@property
def old_attribute_name(self):
print "Tried to access old_attribute_name"
return self.new_attribute_name
@old_attribute_name.setter
def old_attribute_name(self, value):
print "Tried to set old_attribute_name"
return self.new_attribute_name
关于python - 如何处理 python 杂散属性赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025277/