一、面向对象 1、类 对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体 2、在现实世界中:一定先有对象,后来随着人类文明的发展总结出的类对象是具体存在的,而类只是一种抽象概念 3、在程序中,务必保证:先定义类,后调用类来产生对象 现实生活中的对象: 对象1: 特征: school="Oldboy" name="马冬梅" age=18 sex="female" 技能: 学习 选课 对象2: 特征: school="Oldboy" name="甜蜜蜜" age=21 sex="male" 技能: 学习 选课 对象3: 特征: school="Oldboy" name="原石开" age=22 sex="male" 技能: 学习 选课 现实生活中的老男孩学生类: 相同的特征 school="Oldboy" 相同的技能 学习 选课 1、程序中的类 class OldboyStudent: 用变量表示特征 school="Oldboy" stu1, "马冬梅", 18, 'female' def __init__(self,name,age,sex): #self=stu1 name= "马冬梅" age=18 sex="female" # print('==========init run=============>') self.name=name # stu1.name = "马冬梅" self.age=age # stu1.age = 18 self.sex=sex # stu1.sex = "female" 用函数表示技能 def learn(self): print('is learning...',self) def choose(self): print('choose course...') 在程序中:必须先定义类 - -----》调用类 - -----》对象 stu1=OldboyStudent() stu1.NAME='马冬梅' stu1.AGE=18 stu1.SEX="female" stu2=OldboyStudent() stu2.NAME='甜蜜蜜' stu2.AGE=21 stu2.SEX="male" stu3=OldboyStudent() stu3.NAME='原石开' stu3.AGE=22 stu3.SEX="male" print(stu1.NAME,stu1.school) print(stu2.NAME,stu2.school) print(stu3.NAME,stu3.school) 上述产生的三个对象都一样了 调用类发生哪些事: 1、首先会产生一个空对象stu1 2、会自动触发类内部的__init__函数 3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,"马冬梅",18,'female'),将这四个参数一起传给__init__函数 stu1=OldboyStudent("马冬梅",18,'female') #OldboyStudent.__init__(stu1,"马冬梅",18,'female') stu2=OldboyStudent("甜蜜蜜",21,'male') #OldboyStudent.__init__(stu2,"甜蜜蜜",21,'male') stu3=OldboyStudent("原石开",22,'male') 调用类---》产生类的对象,该对象也可以称为类的一个实例,调用类的过程也称为类的实例化 stu1=OldboyStudent('李三胖',18,'male') #OldboyStudent.__init__(stu1,'李三胖',18,'male') OldboyStudent.country='CHINA' print(OldboyStudent.country) stu2=OldboyStudent('王大炮',28,'male') print(stu2.__dict__) 类内部定义的变量是给所有对象共享,所有对象指向的都是同一个内存地址 类内部定义的函数,类可以使用,但类来用的时候就是一个普通函数,普通函数有几个参就传几个参数 类内部定义的函数,其实是给对象使用的,而且是绑定给对象用,绑定给不同的对象就是不同的绑定方法 绑定方法的特殊之处在于,谁来调用,就会将谁当作第一个参数自动传入 stu1.learn() # OldboyStudent.learn(stu1) stu2.learn() # OldboyStudent.learn(stu2) 绑定方法的特殊之处: 1、 绑定给谁就应该由谁来调用, 2、谁来调用就会把谁当做第一个参数传入 class People: x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def run(self): #self=obj print('%s is running' %self.name) #obj.name def f1(): print('from f1') def f2(self): pass obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male') obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male') obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male') print(People.f1) People.f1() print(obj.f1) obj.f1() #People.f1(obj) Python一切皆对象:在python3中统一了类与类型的概念,类即类型