面向对象编程
面向对象编程是一种程序设计思想,它把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
面向过程的程序设计把计算机程序视为一系列命令的集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数来降低系统的复杂度
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递
类和实例
类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”
#定义类 #类体代码在类的定义阶段就会立刻执行 class Student: #class后面紧接着是类名,类名通常是大写开头的单词 school='oldgirl' def learn(self): print('is learning') def choose_course(self): print('choose course') print('===run') #查看属性 print(Student.__dict__) #查看类的名称空间 print(Student.school) #访问类的数据属性,等同于Student.__dic__['school'] print(Student.learn) #访问类的函数属性 #增加属性 Student.country='China' #等同于Student.__dic__['country']='China' print(Student.country) #修改属性 print(Student.school='Oldgirl') #删除属性 del Student.country
class Student: school='oldgirl' #__init__方法是在产生对象后才会执行,只用来为对象进行初始化操作,把name,age等属性绑上去,且不能有返回值 def __init__(self,name,age): self.name=name self.age=age def learn(self): print('is learning') def choose_course(self): print('choose course') #调用类即实例化(首先得到一个返回值即对象,该对象是一个空对象stu1;
#其次执行Student__init__(stu1,'lary',18)) stu1=Student('lary',18) #stu1.name='lary',stu1.age=18 print(stu1.name,stu1.age)
属性查找与绑定方法
查找对象的属性顺序是:对象自己的__dict__,再找类的__dict__
类的数据属性是所有对象共享,类的函数属性是绑定给对象用的
class Student: school='oldgirl' def __init__(self,name,age): self.name=name self.age=age def learn(self): print('%s is learning'%self.name) def choose_course(self): print('choose course') stu1=Student('lary',18) stu2=Student('egon',20) #类的数据属性是所有对象共享的 print(id(stu1.school),id(stu2.school)) #类的函数属性是绑定给对象用的 print(stu1.learn,stu2.learn) #<bound method Student.learn of <__main__.Student object at 0x0532F1D0>> #绑定类中定义的函数是绑定给对象用的,不同的对象就是不同的绑定方法 #绑定给谁,就由谁来调用,谁调用,就将该对象当作第一个参数传给方法,即自动传值 stu1.learn() #stu1.learn=Student.learn(stu1) Student.learn(stu1) #类调用自身的方法需给位置参数传值 #绑定到对象的方法这种自动传值的特征,决定了在类中定义的函数都要写一个默认参数(习惯用self,其他名字也可以)
类即类型
python中一切皆对象,且python3中类与类型是一个概念,类即类型
#类即类型 class Teacher: school='oldboy' count=0 def __init__(self,name,age,sex): self.Name=name self.Age=age self.Sex=sex Teacher.count+=1 def teach(self): print('%s teaching'%self.Name) def course(self): print('%s teach course'%self.Name) teacher1=Teacher('egon',18,'male') print(type(teacher1)) p=[1,2,3,4] #p=list([1,2,3,4]) print(type(p)) p.append(5) #list.append(p,5) print(p)
isinstance 和issubclass
#isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj,Foo))
#issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar,Foo))