是否有一个python函数来重命名对象的属性?

时间:2014-08-14 14:30:00

标签: 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 个答案:

答案 0 :(得分:8)

不,没有,但你可以让更容易玩命名空间:

def rename_attribute(obj, old_name, new_name):
    obj.__dict__[new_name] = obj.__dict__.pop(old_name)

答案 1 :(得分:3)

这样做没有内置或标准库函数。我假设,因为:

  • 这是微不足道的,因为你的完全充分的例子显示了
  • 没有一般用例

答案 2 :(得分:1)

您可以做的是使用 Setter and Getter bult-in python's methods 为原始属性提供外观/重命名。

例如:假设您有一个属性 attr,并且您想将其重命名为 new_attr,以便在引用 attr 时返回或修改 new_attr。< /p>

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