面向对象编程
* 数据类被视为一个对象
* `class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name, self.score))`
* 属性绑定
* `__init__` 方法
* 第一个参数永远是`self`,表示创建的实例本身,因此,在`__init__` 方法内部,就可以把各种属性绑定到self, 因为self就指向创建的实例本身
* 在创建了`__init__` 方法之后,在创建实例的时候,就不能直接传入空的参数了,必须传入与`__init__` 匹配的参数,但是self 本身不需要传递,Python解释器自己会把实例变量传进去
* 数据封装
* 定义一个方法,除了第一个参数是self之外,其他的地方和普通函数一样。要调用一个方法,只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入
* 类是创建实例的模板,而实例则是一个个的具体的对象,各个实例拥有的数据都互相独立,互不影响;
* python 允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然他们都是同一个类的不同实例,但是拥有的变量名称可以不同
* 内部属性可以被外部访问和修改
* ` def __init__(self, name, score):
self.name = name
self.score = score`
* 内部属性不可以被外部访问和修改
* ` def __init__(self, name, score):
self.__name = name
self.__score = score`
* 属性的名称前面加上两个下划线`__`, 在python中,如果实例的变量名以`__`开头,就变成了一个私有变量,外部不能访问
* 在python中,变量名以 `__xx__`,是特殊变量,并不是私有变量
继承和多态
* 父类和子类
* 子类自动继承父类的方法
* 当子类和父类同时定义同名的方法时,子类的方法覆盖父类的方法