要实现包含属性验证,可以使用以下的代码示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __setattr__(self, name, value):
if hasattr(self, name):
raise AttributeError(f"Attribute '{name}' already exists")
else:
super().__setattr__(name, value)
person = Person("John", 25)
person.name = "Mike" # Valid assignment
person.age = 30 # Valid assignment
person.gender = "Male" # Raises AttributeError: Attribute 'gender' already exists
在这个例子中,Person
类有两个属性 name
和 age
。我们重写了 __setattr__
方法,它会在属性被赋值时被调用。在 __setattr__
方法中,我们使用 hasattr
函数来检查属性是否已经存在。如果属性已经存在,我们就抛出一个 AttributeError
异常,表示属性已经被定义。否则,我们调用父类的 __setattr__
方法来设置属性的值。
在使用这个例子时,如果我们尝试给已经存在的属性赋值,就会抛出 AttributeError
异常。这样可以确保属性只能被设置一次。