面向对象
什么是面向对象:
面向对象是一门编程思想
面向过程思想
核心是“过程”二字,过程指的是解决问题的步骤,先做什么再做什么
基于该编程思想编写程序,如流水线,一种机械式的思维
优点:
将复杂的问题流程化,进而简单化
缺点:
牵一发而动全身,程序的可扩展性差
如:面向过程的编程思想就是函数的使用,这句话不对
ps: 编程思想是一门思想,与任何的技术无关
面向对象的编程思想:
注意:
核心是“对象二字”,对象指的是“特征与技能”的结合体
基于该编程思想编写程序,要有一种“上帝式”的思维方式
优点:
可扩展性高
缺点:
编写程序的复杂程度比面向过程高
如何产生对象:
1)什么是类:
类指的是类型,类别
用两种角度去看待:
现实社会种:
先有一个个的对象,经过社会的文明发展,随之总结出类
在程序中:
必须先有类,再通过“调用类,产生对象”
对象指的是“特征与技能”的结合体,类指的是一系列“对象之间相同的特征与技能”的结合体
对象是实际存在的,而类抽象产生的
2)如何定义类:
如何写类并产生对象:
先从现实世界中通果一个个对象总结出类
然后再定义类,后调用类产生对象
3)定义类语法:
class 关键字:帮你产生类的
class类的名字:
对象之间相同的特征
对象之间相同的技能
定义类名的规范:
驼峰命名法
class Student:
# 类名指向的是类的内存地址
school = 'oldboy' # 类中特征也称之为‘属性’ attribute
def func(self): # 在类内部定义函数,会默认有一个参数self 此时可以当作形参
print('1111')
# 查看类的名称空间
print(Student)
print(Student.__dict__['func'](1))
print(Student.__dict__['school'])
print(Student.__dict__)
# 类还提供了一种特殊获取名字的方式”类名.名字“的方式
# 可以增删改查
函数的名称空间:
在调用函数时产生,函数调用结束后销毁
类的名称空间:
在定义阶段时产生,会将类中所有的名字,扔进类的名称空间中
对象的产生:
调用类即产生对象
类名+()调用类产生对象
类的名称空间在定义时产生,对象的名称空间在调用类时产生
调用类产生对象的过程成为类的实例化,对象则成为类的实例
对象调用方法时:会将对象作为第一个参数传入方法中
由对象来调用类内部的函数,称之为对象的绑定方法
绑定方法的特别之处:会将对象当做第一个参数传给该方法
给对象添加新的属性:
def__init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
想要在调用类时,为对象传入独有的特征
调用类时:会将对象当作第一个参数,与括号内所有的参数一并传给__ init __()
stu1 = Student('tank','male',17)
name -->tank , sex-->male, age--17
ps: 凡是在类内部定义的,__ 开头或者 __结尾的方法都有特殊的意义
在类内部定义的方法,在调用类时触发,会自动将对象本身当做第一个参数自动传入,与括号内所有的参数一并传给__ init __()
对象名字的查找顺序:
1.对象.属性,会先找对象自己的。
2.若对象没有,会去找类的。
3.若类没有,则会报错。
总结
调用类产生对象发生的事情:
1.会产生一个空对象的名称空间
2.会自动触发__ init __,并且会将对象当作第一个参数传入
3.会将调用类括号内的参数一并传给__ init __()
类中的方法是给函数对象使用的
对象绑定方法的特殊之处是:
1.会将对象当作第一个参数传入
2.若对象的绑定方法还有其他参数,会一并传入