类的属性通常可以在init方法里定义:
class Animal(object):
def __init__(self, height):
self.height = height
但是这样定义不能校验传入的参数,所以通常要把参数设置为私有变量,在变量名前加下划线:
class Animal(object):
def __init__(self, height):
self._height = height
然而这样属性在外部就不可读写,这时需要增加get、set方法:
class Animal(object):
def get_height(self):
return self._height
def set_height(self, value):
if not isinstance(value, float):
raise ValueError("高度应该是小数")
if value < 0 or value > 300:
raise ValueError("高度范围是0到300cm")
self._height = value
d = Animal()
d.set_height(250.9)
print(d.get_height()) --------------> 250.9
但是这样在外部调用时代码很繁琐,在这里用装饰器@property简化get、set方法
class Animal(object):
@property
def height(self):
return self._height
@height.setter
def height(self, value):
if not isinstance(value, float):
raise ValueError("高度应该是小数")
if value < 0 or value > 300:
raise ValueError("高度范围是0到300cm")
self._height = value
d = Animal()
d.height = 250.9
print(d.height) --------------> 250.9