类和实例
访问限制
请把下面的Student
对象的gender
字段对外隐藏起来,用get_gender()
和set_gender()
代替,并检查参数有效性:
gender_range = ['male', 'female']
class Student(object):
def __init__(self, name, gender):
self.name = name
if not gender in gender_range:
raise ValueError('Not valid gender input')
self.__gender = gender
def get_gender(self):
return self.__gender
def set_gender(self, gender_value):
if not gender_value in gender_range:
raise ValueError('Not valid gender input')
self.__gender = gender_value
实例属性和类属性
为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count = 0
def __init__(self, name):
self.name = name
Student.count += 1
使用@property
请利用@property
给一个Screen
对象加上width
和height
属性,以及一个只读属性resolution
:
class Screen(object):
def __init__(self):
pass
@property
def width(self):
return self._width
@width.setter
def width(self, value):
if not isinstance(value, int):
raise ValueError('value of width must be integer')
if value < 1:
raise ValueError('value of width must be positive')
self._width = value
@property
def height(self):
return self._height
@height.setter
def height(self, value):
if not isinstance(value, int):
raise ValueError('value of height must be integer')
if value < 1:
raise ValueError('value of height must be positive')
self._height = value
@property
def resolution(self):
self._resolution = self._width * self._height
return self._resolution