自定义类

  1. class Student(object):
  2. def __init__(self, name, score):
  3. self.name = name
  4. self.score = score
  5. def print_score(self):
  6. print('%s: %s' % (self.name, self.score))

__init__ 代表实例的初始化, self 代表实例本身

  1. >>> bart = Student('Bart Simpson', 59)
  2. >>> bart.name
  3. 'Bart Simpson'
  4. >>> bart.score
  5. 59
  6. >>> bart.print_score()
  7. Bart Simpson: 59

看似 bart.print_score() 没有传入参数,实际上它是将 bart 作为第一个参数 self 传入,与 Student.print_score(bart) 等价。

  1. >>> Student.print_score(bart)
  2. Bart Simpson: 59

访问限制

上面的代码不仅能访问 bart.score ,还能轻松修改,如果我们想限制对其的访问和修改,可以在变量前添加两条下划线 __ ,这样变量就变成了私有变量,只能在内部访问。

  1. class Student(object):
  2. def __init__(self, name, score):
  3. self.__name = name
  4. self.__score = score
  5. def print_score(self):
  6. print('%s: %s' % (self.__name, self.__score))

实际上,python解释器是把 __name 变成了 _Student__name ,还是可以访问的

  1. >>> bart._Student__name
  2. 'Bart Simpson'

但不同版本的python解释器会把__name 解释成不同的变量名,因此不推荐这种方式访问。

前面加一个下划线 _ 的变量也最好不要外部访问,虽然python没有禁止访问,但这是程序员之间默认的约定