python - 如何处理 python 杂散属性赋值

标签 python dynamic attributes

有时我需要更改已在代码的其余部分中广泛使用的 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/

相关文章:

在 Chrome 中调试从 TypeScript 生成的动态加载的 Javascript

python - 该对象在 Django 中没有属性 'is_hidden'

c# - 基于属性的编程有什么优点?

python - 我想根据列将标签 0/1 分配给 pandas 数据框

Python 3.x 的字典 View 对象和 matplotlib

javascript - 使用 .search() 或正则表达式查找 ID 中包含 X 的元素

javascript - 为所有用户动态更新页面的一部分

javascript - 如何只获取 HTML 页面中的属性?

python - 为什么 python3 的加载时间是 python2 的两倍?

python - 创建文本文档 (Python)