python的@property详解

1.简介

‘property’是一种特殊的函数装饰器,用于实现类的属性访问控制 

它提供了一种更加简单和方便的方式来访问和修改对象的属性

2使用过程

1.当我在一个类中使用“property”装饰器来定义一个属性时,它实际上会生成三个方法

        1.一个获取给属性的值

        2.一个用于设置该属性的值

        3.以及删除该属性的值

这些方法的名称都是我们在使用“property”装饰器时所指定的属性名称

具体地说

        1.当我们通过实例访问该属性,会自动调用'getter'方法来获取属性的值

        2.当我们对这个属性进行赋值时,会自动调用“setter”方法来设置属性的值

        3.当我我们使用“del”关键字 删除这个属性时,会自动调用“deleter”方法来删除这个属性

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        print('getting name')
        return self._name

    @name.setter
    def name(self, value):
        print('setting name to ', value)
        self._name = value

    @name.deleter
    def name(self):
        print('deleting name')
        del self._name


p = Person('Alice')
print(p.name)
p.name = 'Bob'
del p.name

需要注意:我们在类中使用’property‘装饰器来定义一个属性时,实际上是定义了一个名为’name‘的方法,而不是一个真正的属性

使用@property不使用@property.getter是因为@[email protected],@property已经含有.getter方法了无须重复

在Python中,属性访问类似于Java中的"访问器方法"(accessor method),也就是getter和setter方法。在Python中,我们可以通过定义属性来控制对对象属性的读写操作,这些属性本质上是方法,可以使用@property装饰器将其定义为getter方法,并使用@.setter装饰器来定义setter方法。 

class Person:
    def __init__(self, age):
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

在这个例子中,我们定义了一个名为"age"的属性,它具有一个getter方法和一个setter方法。getter方法返回实例变量"_age"的值,而setter方法验证传递给它的值是否大于等于0,如果小于0,则抛出ValueError异常,否则将其赋值给"_age"变量。

通过这种方式,我们可以控制对"age"属性的读写操作,并确保只有有效的值被设置为属性的值。这种属性访问的方式与Java中的访问器方法非常相似,因为它们都采用了类似的语法和模式。

你可能感兴趣的:(python,开发语言,装饰器模式)