有没有Python函数可以重命名对象的属性?
简单来说,是否已经有一个内置的或者常用的函数可以做到这一点:
def rename_attribute(object_, old_attribute_name, new_attribute_name):
setattr(object_, new_attribute_name, getattr(object_, old_attribute_name))
delattr(object_, old_attribute_name)
3 个回答
3
你可以使用Python内置的Setter和Getter方法来给原来的属性提供一个新的名字或者外观。
举个例子:假设你有一个属性叫attr
,你想把它改名为new_attr
,这样在提到new_attr
的时候就可以返回或修改attr
。
class Foo:
def __init__(self, a):
self.attr = a
@property
def new_attr(self):
return self.attr
@new_attr.setter
def new_attr(self, new_value):
self.attr = new_value
当你用新的名字来调用这个属性时,我们有:
if __name__ == '__main__':
f = Foo(2)
print('The renamed attribute is', f.new_attr)
f.new_attr = 5
print('The renamed attribute after using setter method is', f.new_attr)
print('The old attribute is', f.attr)
输出结果是:
'The renamed attribute is 2'
'The renamed attribute after using setter method is 5'
'The old attribute is 5'
注意,
attr
始终可以使用,而new_attr
总是指向attr
。
19
不,没有这样的东西,但你可以通过调整命名空间来让事情变得更简单:
def rename_attribute(obj, old_name, new_name):
obj.__dict__[new_name] = obj.__dict__.pop(old_name)
4
没有内置的或标准库的函数可以做到这一点。我猜是因为:
- 这很简单,就像你给的例子一样
- 没有普遍适用的场景