【问题标题】:Question for incorrect class attribute name in pythonpython中类属性名不正确的问题
【发布时间】:2022-10-05 10:40:55
【问题描述】:

我是学习 Python 的初学者,在类属性中有一个问题。 如果我定义一个简单的类如下:

class class_test:
    def __init__(self, name):
        self.name = name

我创建了一个带有初始值的 class_test 对象

a = class_test(\'John\')

现在我将更改对象的属性值,但我用拼写错误指定了属性。

a.naem = \'Mary\'

这会在对象中创建一个新属性,而不是生成属性错误。 我知道这可能不是更改对象属性的好方法。我只是好奇这种错误可以在其他语言(如 C++)的编译时检测到。在 Python 中,类和对象可以在创建后添加新属性。是否有禁止这种行为的选项? 无论如何都会生成属性错误而不是为拼写错误创建新属性?

    标签: python


    【解决方案1】:

    一种选择是使用__slots__ 并编写实例允许的属性名称:

    class class_test:
    
        __slots__ = ('name',)
    
        def __init__(self, name):
            self.name = name
    

    测试:

    >>> a = class_test('John')
    >>> a.naem = 'Mary'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'class_test' object has no attribute 'naem'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多