1、面向对象编程:
对象指:特征与技能的结合体
面向对象编程的优点:可扩展性强
缺点:难度>面向过程
2、类的定义: 【先定义类,后调用类来产生对象】
对象是特征与技能的结合体,则类就是一系列对象相同的特征与技能的结合体。
【用变量表示特征,用函数表示技能】
类=变量+函数
注:(1)类名的定义,通常使用驼峰的方法 class MyLogin():pass
(2)在定义类的阶段会立刻执行类体内的代码,然后将产生的名字存放于类名空间中 【重要】
类的属性=变量属性+函数属性
调用方法:类名.属性
class MyInfo(): name='psy' def love(self): print('love you') return '' print('===>') #就算不调用类,根据2、(2)可知:屏幕也会显示这个'===>' my=MyInfo() #实例化一个对象 print(my.name) print(my.love())
结果显示:
===> psy love you
3、类中一般自带__init__(self) 【初始化】
class Stu(): def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def choose(self): print('{} is choosing things'.format(self.name)) stu1=Stu('psy',18,'female') stu1.choose() #psy is choosing things
调用类会发生3件事: 【基于上述例子】
(1)首先产生一个空对象stu1
(2)会自动触发类内部的__init__函数
(3)然后将空对象stu1连同调用类时括号内的参数组成(stu1,'psy',18,'female'),将这四个参数一起传给__init__函数
【相当于Stu.__init__(stu1,'psy',18,'female')】
调用类===》产生类的对象,该对象也称为类的一个实例,调用类的过程也称为类的实例化
So 调用类的过程==等价==类的实例化
实例化的结果就是一个对象,或称为一个实例。
4、对象和类的再介绍 【结合例子】
class Stu(): x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def choose(self): print('{} is choosing things'.format(self.name)) obj=Stu('psy',18,'female') #等价于Stu.__init__(obj,'psy',18,'female')
4-1)产生的对象的名称空间怎么查看? obj.__dict__
print(obj.__dict__) #{'name': 'psy', 'sex': 'female', 'age': 18}
4-2)对象的操作
print(obj.name) #查看对象属性 obj.education='Major' #增加对象属性 del obj.sex #删除属性 obj.age=24 #修改对象属性 print(obj.__dict__) #{'age': 24, 'education': 'Major', 'name': 'psy'}
4-3)对象属性的查找顺序:先找对象自己的命名空间===》类的命名空间
(1)类的数据属性:是给对象用的,且直接贡献给所有对象使用,内存地址一样
(2)类的函数属性:也是给对象用的,但是绑定给对象用的,绑定到不同的对象就是不同的绑定方法,内存地址也不相同,但是其实都是指向同一个功能!
print(Stu.choose) #<function Stu.choose at 0x00000232F1738510> #Stu.choose() #报错: choose() missing 1 required positional argument: 'self' Stu.choose(obj) #psy is choosing things
4-4)绑定方法的特殊之处 【针对4-3)(2)】 类内部定义的函数,类可以使用,但实际上是给对象使用
(1)绑定给谁就该由谁来调用
(2)谁来绑定就把谁当做第一个参数传入