python中property与setter getter的区别

python的类定义中不免会用到私有属性,一般来说我们会使用setter()和getter()来设置和获取私有属性。如一下代码:

class book(object):
    def __init__(self,name,price):
        self._name = name
        self._price = price

    def get_name(self):
        return self._name
    def set_name(self,name):
        self._name = name

    def get_price(self):
        return self._price
    def set_price(self,price):
        self._price = price


book1 = book('活着',30)
print(book1.get_name())
print(book1.get_price())

book1.set_price(60)
print(book1.get_name())
print(book1.get_price())

 

 

 python中property与setter getter的区别_第1张图片

与C++相似,这种定义可以概括为两点:

1.确保属性私有,不可随意修改

2.提供可以获取和修改属性的方法getter()和setter()

但是在python中还可以使用property来进行另一种优雅的方式定义


class book(object):
    def __init__(self,name,price):
        self._name = name
        self._price = price

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self,name):
        self._name = name

    @property
    def price(self):
        return self._price

    @price.setter
    def price(self,price):
        self._price = price


book1 = book('活着',30)
print(book1.name)
print(book1.price)

book1.price = 60
print(book1.name)
print(book1.price)

 python中property与setter getter的区别_第2张图片

 使用@property装饰器修饰price方法,可以像使用属性一样去使用方法,而且省去了方法调用时的 "()"。

 

你可能感兴趣的:(python,开发语言)