有时我需要更改已在其余代码中广泛使用的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__
,但感觉就像强迫我在Python上深层次的C / C ++思维方式。
所以我想问一下,我在这里做错了什么? 如果我尝试(以某种方式)阻止在实例化之外创建属性,我将失去什么? 什么是处理杂散属性分配的pythonic方法?
答案 0 :(得分:3)
您可以将旧属性名称设为属性
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
答案 1 :(得分:0)
您可以尝试使用“重构”工具,而不是尝试使用搜索和替换来查找需要更改的所有位置。
答案 2 :(得分:0)
你可以用财产做到这一点。它将阻止获取和设置旧属性名称。
class A(object):
@property
def old_name(self):
raise NotImplementedError()