有没有Python函数可以重命名对象的属性?

11 投票
3 回答
13208 浏览
提问于 2025-04-18 17:17

简单来说,是否已经有一个内置的或者常用的函数可以做到这一点:

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内置的SetterGetter方法来给原来的属性提供一个新的名字或者外观。

举个例子:假设你有一个属性叫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

没有内置的或标准库的函数可以做到这一点。我猜是因为:

  • 这很简单,就像你给的例子一样
  • 没有普遍适用的场景

撰写回答