python @property

148 阅读1分钟
之前学python的时候对只讲了用@property修饰方法可以像访问属性一样来访问方法, 也没有给例子

 直到看了雪峰大佬的网站才真正知道这个含意:

一般的类设定和访问属性要有对应的setter和getter

设定用set_name, 访问用get_name

class AA():
    def __init__(self, name=''):
        self.__name = name
    def get_name(self):
        return self.__name
    def set_name(self, name):
        self.__name = name

a = AA()
print(a.get_name())
a.set_name('binn') #设定用set_name
print(a.get_name()) #访问用get_name

如果用@property就要这样写, @property修饰getter方法aaa(此例中为name), @name.setter修饰setter, 如果没有@name.setter修饰的setter方法就是一个只读属性

class AAA():
    def __init__(self, name='', age=0):
        self.__name = name
        self.__age = age
    @property
    def name(self):
        return self.__name
    @name.setter
    def name(self, name):
        self.__name = name
    @property
    def age(self): #只读属性__age
        return self.age
a =AAA()
a.name = 'new' #设定,会自动调用设定方法
print(a.name) #访问,会自动调用访问的方法