如下:
class animal(object):
def __init__(self,name,age):
self.name = name;
self.age = age;
a = animal("zhuzhu",9)
a.name
Out[3]: 'zhuzhu'
a.age
Out[4]: 9
a.age=20
a.age
Out[5]: 20
在python中a.name实际用的是name属性的getter方法,a.age=20调用的是setter方法。
通过@property能把python中定义的函数,当做属性访问从而提供友好的访问方式。
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
在这段代码中,定义score函数,利用@property把它变为可访问的属性,实际上是把getter方法变成了属性,@score.setter重写了score的setter方法,并加上了相应的限制。