Class 是一种抽象概念,比如我们定义class--students,是指学生这个概念,而实例instance则是指一个个具体的学生,比如,张三,李四两个具体的学生。
面向对象的抽象程度又比函数要高,因为一个class即包含了数据,比如学生姓名,年龄,又包含了操作数据的方法。
数据封装,继承和多态是面向对象的三大特点。
类和实例是面向对象中的重要概念
类是指抽象出的模板。实例则是根据类创造出来的具体对象,每个对象都拥有从类中继承的相同方(function),但是各自的数据可能不同。
在python中定义一个类:
class Student(object):
pass
关键字 class 后面跟着类名,类的名字通常是大写字母开头,紧跟着(object),表示该类是从哪个类继承下来的。通常,如果没有合适的继承类就是用object类,这是所有类都会最终继承下来的类。
定义好了类就可以根据 Student类创建实例:
zhangsan = Student()
可以给实例变量绑定属性
zhangsan.name = 'zhangsan'
类同时可以起到模板的作用,我们在常见一个类的同时,可以把一些公认的东西写进类的定义中去,在python中通过一个特殊的__init__方法实现:
class Student(object):
def__init__(self,name,score):
self.name = name
self.score = score
__init__方法的第一个参数永远是self,表示创建实例本身,在__init__方法内部,可以吧各种属性绑定到self,因为self指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传 因为python解释器会自己把实例变量传进去。
与普通函数相比,在类中定义函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法与普通函数没有区别。
面向对象编程一个重要的特点是数据的封装。既然我们创建的实例里有自身的数据,如果想访问这些数据,就没必要从外面的函数去访问,可以在Student类内部去定义这样一个访问数据的函数。这些封装数据的函数和Student类本身关联起来的,我们称之为类的方法:
class Student(object):
def__init__(self,name,score):
self.name = name
slef.score = score
def print_score(self):
print("%s:%s"%(self.name,self.score))
要定义一个类的方法,除了传递第一参数self外,其他和普通函数一样,**slef为约定,假设你用别的实例化也可以,但是第一个必须要有**