赞
赏
在 Python 中,如果我们仅仅使用 property() 函数为 类 的 属性 设置装饰器,那么该属性是只读的,不可以被修改。
如果,我们需要为类属性添加一个可写的装饰器,那么我们需要使用 @propertyname.setter
来修饰类的属性。
@propertyname.setter
def propertyname(self, value)
pass
我们使用 @propertyname.setter
定义了一个装饰器 propertyname,该装饰器的作用是为 propertyname 这个属性提供了 set 方法。
因为这是一个装饰器,因此,我们在调用该方法时,不需要使用 ()
,即我们调用该装饰器的语法为 instance.propertyname = value
的形式。
使用 @propertyname.setter 方法,定义读写装饰器
print("嗨客网(www.haicoder.net)")
class Person(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
@property
def name(self):
return self.__name
@property
def age(self):
return self.__age
person = Person("haicoder", 18)
print("Person name =", person.name, "age =", person.age)
person.name = "HaiCoder"
person.age = 109
print("Person name =", person.name, "age =", person.age)
程序运行后,控制台输出如下:
我们希望通过 person.name
和 person.age
的形式,给实例变量赋值,但此时程序报错,因为我们使用 @property
修饰的属性是只读属性,因此不可以修改属性的值。我们将程序修改如下:
print("嗨客网(www.haicoder.net)")
class Person(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
@property
def name(self):
return self.__name
@property
def age(self):
return self.__age
@name.setter
def name(self, val):
self.__name = val
@age.setter
def age(self, val):
self.__age = val
person = Person("haicoder", 18)
print("Person name =", person.name, "age =", person.age)
person.name = "HaiCoder"
person.age = 109
print("Person name =", person.name, "age =", person.age)
程序运行后,控制台输出如下:
我们分别使用 @name.setter
和 @age.setter
为 name 属性和 age 属性添加了 setter 装饰器,此时,我们再次给 name 属性和 age 属性设置值,程序不再报错。
在 Python 中,如果我们仅仅使用 property() 函数为类的属性设置装饰器,那么该属性是只读的,不可以被修改。
如果,我们需要为类属性添加一个可写的装饰器,那么我们需要使用 @propertyname.setter
来修饰类的属性。Python setter装饰器语法:
@propertyname.setter
def propertyname(self, value)
pass