一、面向对象
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中统一了类与类型的概念,类即类型