Python的@property装饰器使用

在C++,java等其他语言种对一个私密属性进行操作作时都需要创建两个方法,get方法和set方法

Python当然也可以这样做

class Man(object):
    def get(self):
        return self._name

    def set(self,name):
        if not isinstance(name,str):
            raise ValueError('name must be an string')
        self._name = name

m = Man()
m.set('jack')
print(m.get())
结果:jack

可是,每次都要通过方法才能对值进行操作感觉有点麻烦,有没有可以直接对变量进行操作的方法?

有!就是使用property装饰器

class Man(object):
    @property
    def name(self):
        return self._name

    @name.setter
    def name(self,value):
        if not isinstance(value,str):
            raise ValueError('value must be an string')
        self._name = value

m = Man()
m.name = 'ben'
print(m.name)

只要加上了property装饰器,把一个get方法变成了属性,这时name.setter又把set方法变成属性赋值,这样就拥有了一个可以操作的变量了。

上面代码实现了私有变量的读写操作,下面给大家介绍:只读、只写操作

class Lady(object):
    def __init__(self,name):
        self._name = name
    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return None

    @age.setter
    def age(self,value):
        self._age = value


candy = Lady('Candy')
print(candy.name)
candy.age = 20
print(candy.age)
结果:Candy
     None

只写上property装饰器,没有写setter只能读取name的值,这就实现了只读。

把property装饰的函数然后一个None,而settr可以进行赋值,这就实现了只写。

如有疑问或者错误的地方可以评论告诉我,我回及时回复的

猜你喜欢

转载自blog.csdn.net/qq_38949193/article/details/81204507
今日推荐